new text
Git - это система управления версиями, которая позволяет разработчикам отслеживать изменения в своем коде. GitHub - это веб-платформа, которая предоставляет хостинг для репозиториев Git. Она облегчает совместную работу над проектами, обмен кодом и отслеживание изменений.
Для начала работы с Git и GitHub вам нужно установить Git на свой компьютер. Вы можете скачать его с официального сайта Git. Если у вас еще нет аккаунта GitHub, вы можете создать учетную запись на GitHub здесь.
Вообще вы уже создали репозиторий git, используя как шаблон репозиторий созданный для этого занятия. Зачастую именно с создания репозитория на основе шаблона проекта и начинается работа.
Когда вы создаете новый проект, вы можете начать с нуля, но более эффективным способом будет использование готового шаблона, который уже содержит базовую структуру проекта, настройки и библиотеки. Такие готовые шаблоны называются "boilerplate" (бойлерплейт).
Для ускорения создания проекта также можно использовать инструменты, которые генерируют boilerplate код на основе ваших требований. Один из таких инструментов - Cookiecutter. Он позволяет создавать проекты на основе готовых шаблонов для разных языков и фреймворков, применяя настройки и установки пакетов, которые соответствуют вашим требованиям.
Для разных языков и фреймворков могут использоваться разные инструменты для создания шаблонов и генерации boilerplate кода, но в целом идея остается прежней - использование готовых решений для ускорения создания проекта.
Вот пример использования Cookiecutter для создания базового шаблона веб-сервиса на Flask(поскольку python должен быть вам знаком со школы) :
- Установите Cookiecutter на свой компьютер, если вы еще этого не сделали:
pip install cookiecutter
- Используйте Cookiecutter для создания шаблона Flask приложения, используя шаблон от PySlackers:
cookiecutter https://github.com/cookiecutter-flask/cookiecutter-flask.git
-
Введите некоторые данные, например имя проекта, имя автора и прочие параметры, которые будут использоваться для генерации проекта.
-
После того, как Cookiecutter создаст проект, его можно запустить с помощью Docker (но это будем изучать позже), лабо запустив такой код:
cd {{cookiecutter.app_name}}
{%- if cookiecutter.use_pipenv == "True" %}
pipenv install --dev
pipenv shell
{%- else %}
pip install -r requirements/dev.txt
{%- endif %}
npm install
npm run-script build
npm start # run the webpack dev server and flask server using concurrently
- Теперь вы можете открыть браузер и перейти на адрес
http://localhost:5000, чтобы увидеть ваше новое Flask приложение!
Это всего лишь пример, и вы можете использовать другие шаблоны Cookiecutter, чтобы создавать проекты на других языках программирования и фреймворках.
Однако созданное вами приложение это пока просто папка, она не умеет ослеживать версии. Для того чтобы превратить ее в локальный репозиторий нужно:
- Открыть терминал (командную строку) на вашем компьютере.
- Перейти в каталог, где вы уже создали проект и хотите создать репозиторий.
- Введите команду
git init. Это создаст новый репозиторий Git в текущем каталоге. - Теперь ваши изменения будут ослеживаться, можете добавлять файлы, коммитить изменения и т.д. и гит это увидит
Конечно, не обязательно инициализировать заполеннную папку, можно выполнить все те же действия и в пустой папке.
Однако, это репозиторий по прежнему лежит у вас локально. Если возникнут проблемы с диском, данные будут утеряны. Поэтому мы хотим создать наш репозиторий на сервере, чтобы все могли удобно взаимодействовать и не бояться потерять проект.
Но прежде чем мы опубликуем наш код, разберем как редактировать файлы.
После того, как вы создали локальный репозиторий и подключили его к удаленному, вы можете приступить к работе над файлами. Работа в Git обычно включает следующие этапы:
- Редактирование файлов в локальном репозитории.
- Индексация изменений.
- Создание коммита.
Для редактирования файлов в локальном репозитории вы можете использовать любой текстовый редактор. Однако перед редактированием важно проверить, что вы находитесь в правильной ветке.
Задание: Добавьте ваши файлы в индекс и выполните commit.
Теперь создадим отельную ветку feature внесем в ней изменения и выполним коммит, а потом сольем ветку feature с master.
Ветки - это механизм, который позволяет разделять и изолировать различные изменения, которые вносятся в проект. Каждая ветка представляет собой отдельную линию разработки. Например, вы можете создать ветку для разработки новой функции, создать ветку для исправления ошибок или создать ветку для экспериментальных изменений, которые могут не сработать. Ветки могут быть созданы от любого коммита в проекте, и каждый коммит в ветке сохраняет состояние проекта в конкретный момент времени.
При работе с ветками в Git особенно важно следить за их названиями и контролировать связь между ветками и коммитами. Например, основная ветка проекта часто называется "master" или "main", а ветки для новых функций - "feature/<имя функции>". Хорошей практикой является частое создание и использование веток, чтобы уменьшить риск конфликтов при слиянии веток.
Команды Git для работы с ветками:
git branch- показывает список веток в репозиторииgit branch <имя ветки>- создает новую ветку с указанным именемgit checkout <имя ветки>- переключает на другую веткуgit branch -d <имя ветки>- удаляет указанную веткуgit log --graph --all- показывает графическую историю коммитов всех веток
После того, как вы внесли изменения в файлы, вы должны проиндексировать их, чтобы Git знал, какие изменения необходимо включить в следующий коммит. Для индексации изменений используйте команду git add, указав имя измененного файла или каталога.
Примеры:
git add index.html- добавляет изменения из файлаindex.htmlв индекс.git add .- добавляет все изменения из всех файлов в текущем каталоге в индекс.
После того, как вы проиндексировали изменения, вы можете создать коммит, который будет содержать эти изменения. Коммиты являются базовой единицей работы в Git и позволяют отслеживать изменения в истории проекта.
Для создания коммита используйте команду git commit, указав сообщение коммита. Сообщение должно кратко описывать внесенные изменения.
Примеры:
git commit -m "Добавлен новый файл index.html"- создает коммит с сообщением "Добавлен новый файл index.html".git commit -a -m "Обновлен файл styles.css"- создает коммит с изменениями из всех уже проиндексированных файлов и сообщением "Обновлен файл styles.css".
После того, как вы создали коммит, вы можете отправить его на удаленный репозиторий, используя команду git push. Команда push отправляет изменения из локального репозитория на удаленный сервер, где они становятся доступными для других членов команды.
Первые два способа создания репозитория не нужно выполнять, но нужно о них знать.
Чтобы создать новый репозиторий на GitHub, выполните следующие действия:
- Войдите в свою учетную запись на GitHub.
- Нажмите на кнопку "+" в правом верхнем углу и выберите "New repository".
- Дайте вашему репозиторию имя и краткое описание.
- Выберите, хотите ли вы, чтобы ваш репозиторий был общедоступным или частным.
- Нажмите "Create repository".
Чтобы склонировать репозиторий с GitHub на свой компьютер, выполните следующие действия:
- Откройте терминал на вашем компьютере.
- Перейдите в каталог, где вы хотите разместить склонированный репозиторий.
- Скопируйте URL репозитория, который вы хотите склонировать.
- Введите команду
git clone, а затем вставьте URL репозитория после нее. - Нажмите Enter.
А вот теперь давайте опубликуем в репозитории с этим тьюториалом наш созданный Flask шаблон. Для того чтобы это сделать необходимо выполнить следующие действия:
- Свяжите локальный репозиторий с удаленным репозиторием, указав его URL:
git remote add origin <remote_repository_URL>
где <remote_repository_URL> - это URL вашего удаленного репозитория.
- Проверьте, что удаленный репозиторий успешно добавлен как связь с локальным репозиторием:
git remote -v
Вы должны увидеть список удаленных репозиториев, включая название и URL.
- Загрузите локальный репозиторий в удаленный репозиторий с помощью команды
push:
git push -u origin master
Ошибка? Давайте подумаем почему?
Вообще эта команда загружает все изменения из вашего локального репозитория в удаленный репозиторий. В результате, ваш локальный репозиторий будет синхронизирован с удаленным репозиторием. Однако обратите внимание что история нашего локального репозитория расходится с историей репозитория удаленного. Нам нужно как-то это исправить...
Задание: Посмотрите на команды в приложении, там есть решение для нашей проблемы, попробуйте разрешить проблему...
Вопрос: Как вы думаете, какие риски связаны с командой rebase? А когда ее употребление оправдано?
В итоге вы должны создать линейную историю коммитов в этом репозитории, выбирайте файл Readme этого тьюториала при разрешении конфликта.
Вот некоторые основные команды Git, которые вам нужно знать:
git init- инициализирует новый репозиторий Git в текущем каталоге.git clone- клонирует репозиторий Git на ваш компьютер.git status- показывает текущее состояние вашего репозитория.git add- добавляет изменения в индекс (staging area) перед коммитом.git commit- коммитит изменения и сохраняет их в репозитории.
Если вы создали репозиторий на GitHub, то вы можете добавить его в список удаленных репозиториев и работать с ним с помощью следующих команд:
git remote add- добавляет удаленный репозиторий в список удаленных репозиториев.git remote -v- показывает список всех удаленных репозиториев.git pull origin- загружает изменения с удаленного репозитория в ваш локальный репозиторий.git push origin- отправляет изменения из вашего локального репозитория на удаленный репозиторий на GitHub.git fetch origin- загружает изменения с удаленного репозитория в ваш локальный репозиторий, но не объединяет их с вашими локальными изменениями. Командаfetchзагружает только метаданные изменений и не меняет ваши файлы. Это позволяет вам просмотреть изменения и решить, как их объединить с вашими локальными изменениями.
Чтобы объединить изменения, загруженные командой fetch, с вашими локальными изменениями, используйте команду merge или rebase. Например, чтобы объединить изменения из удаленного репозитория с вашими локальными изменениями с помощью команды merge, выполните следующее:
-
git merge origin/main- объединяет изменения из удаленной веткиmainс вашей локальной веткой. Обратите внимание, что для этой команды вы должны быть на нужной ветке в вашем локальном репозитории. -
git merge origin/<branch_name>- объединяет изменения из удаленной ветки<branch_name>с вашей локальной веткой.
Иногда при работе с Git могут возникать конфликты, когда два разных человека пытаются изменить один и тот же файл одновременно. Git предоставляет средства для решения таких конфликтов:
git diff- показывает различия между вашей локальной версией файла и версией файла на удаленном репозитории.git merge- сливает изменения из разных веток в вашу текущую ветку. Пример был выше.git rebase- перебазирует ваши изменения на версию репозитория на удаленном сервере. Это означает, что командаrebaseперемещает ваши изменения наверх истории коммитов, чтобы они следовали за последними изменениями на удаленном сервере.
Пример использования команды git rebase:
При использовании команды rebase вы можете столкнуться с конфликтами слияния, которые могут произойти, когда изменения в вашем локальном репозитории и на удаленном сервере затрагивают одни и те же строки кода. Чтобы решить конфликты, вы можете использовать инструменты слияния, такие как редакторы кода, или команду git mergetool.
Когда вы разрешите конфликты, вам нужно будет добавить измененные файлы в индекс и выполнить команду git rebase --continue, чтобы продолжить перебазирование. Когда перебазирование будет завершено, ваши изменения будут следовать за последними изменениями на удаленном сервере.
Важно помнить, что использование команды rebase может изменить историю коммитов в вашем локальном репозитории, поэтому следует быть осторожным и использовать эту команду только тогда, когда вы полностью понимаете, что делаете.