HowToCommit - Yozh2/UNO GitHub Wiki

Как коммитить

В данной статье Вы узнаете, как работать с данным репозиторием.

Общая структура работы студента с репозиторием:

  1. Для начала, fork оригинальный репозиторий.
  2. Clone репозиторий на свой компьютер.
  3. На локальном репозитории подключите оригинальный репозиторий, как remote upstream, чтобы подтягивать изменения в коде оттуда.
  4. На локальной системе создайте новый branch.
  5. Сделайте необходимые изменения в коде и закоммитьте изменения, в новосозданный branch.
  6. Push/sync изменения на свой репозиторий на GitHub
  7. Начните pull request в оригинальный репозиторий проекта в ветку TrashCan
  8. Ждите решения проверяющего и следите за комментариями к вашему коммиту.

Требования к коду и коммитам:

  1. Хороший код должен быть хорошо задокументирован и закомментирован. Пишите докстринги, комментарии.
  2. Хороший код содержит хорошо названные переменные. Используйте snake_case, не используйте короткие названия, так как это может вызвать конфликты при merge.
  3. Хороший код соответствует PEP8 стилю. Очень рекомендую прочитать этот короткий документ, это сильно улучшит Ваш code style.
  4. Коммиты должны быть адекватно подписаны

Требования к pull-request'у:

1. Запрашивать pull-request можно из созданной Вами отдельной ветки только в TrashCan. Все остальные запросы будут отклоняться, если Вы не администратор.

  1. Перед запросом pull-request, Вы должны проверить, что Ваш код работает.
  2. Перед запросом pull-request, Вы должны проверить, что Ваша ветка нормально мёрджится с TrashCan и после этого код работает.
  3. Если pull-request не принят, надо переделать так, чтобы приняли.

Ниже обсудим каждый шаг и дадим необходимые комментарии.


1. Fork the repo

Зайдите на страницу оригинального репозитория и ответвитесь (fork) от него, сделав копию репозитория в своём профиле.

2. Clone the repo

Скачайте копию (clone) своего репозитория на компьютер. Сделать это можно с помощью git clone или нажав на кнопку download as zip и потом разорхивировав архив. Также можно воспользоваться одним из приложений, например, TortoiseGit или GitHub Desktop. Итак, вы получили локальную копию своего репозитория на компьютере. У вас должен быть установлен как минимум git. Теперь Вы можете работать со своим репозиторием локально, используя все удобные возможности системы контроля версий Git, а затем, когда всё будет готово, Вы можете отправить копию своего локального репозитория обратно на GitHub, используя git push (об этом читай ниже).

Когда репозиторий скачан, нужно разобраться, как подтягивать изменения в коде не только из Вашего (форка) репозитория на сервере, но и оригинального репозитория.

Общий список команд на этом шаге выглядит так:

2.1. Clone your fork:

    git clone https://github.com/YOUR-USERNAME/UNO.git

2.2. Add remote from original repository in your forked repository:

    cd into/cloned/fork-repo
    git remote add upstream https://github.com/Yozh2/UNO.git
    git fetch upstream

2.3. Updating your fork from original repo to keep up with their changes:

    git pull upstream

3. Create new branch

В оригинальном репозитории присутствует три ветки (branches):

  1. master - все полностью готовые к релизу версии проекта. Гарантированно рабочие. Пушить сюда запрещено. Мёрджить может только администрация проекта. Все пулл-реквесты в master будут отклонены. Рекомендовано использовать эту ветку для ветвления от неё при начале работы, ибо тогда Ваш код изначально будет гарантированно работающим.
  2. develop - активная ветвь разработки. Сюда мёрджатся коммиты из TrashCan, когда пройдут проверку и "обкатку". Всем, кроме администрации, пушить сюда также запрещено. Все пулл-реквесты в develop будут отклонены. Пуллить код отсюда рекомендуется, если вы хотите получить почти готовый код, прошедший проверку и с необходимыми дополнениями администрации.
  3. TrashCan - ветвь для принятия работ студентов. Все пулл-реквесты студентов могут быть приняты только в эту ветку. После они проходят обкатку и проверку на пригодность и мёрджатся в develop. Пуллить из этой ветки можно, если Вы хотите получить самый актуальный, но нестабильный код.

Для внесения в код изменений в Вашем локальном репозитории рекомендуется создать новую ветку с помощью git checkout -b <feature> или GUI-приложений. Новая ветка позволит не вносить изменений в уже существующие коммиты, поэтому, например, Вы всегда сможете переключиться на master и посмотреть локально первоначальное состояние рабочей версии. Плюс новые ветки позволяют вести несколько вариантов Вашего проекта одновременно и так, чтобы это не мешало друг другу. Это очень удобно. Почитайте об этом в Yozh2's Руководство по совместной разработке™

4. Commit changes

В локальном (скачанном на компьютер) репозитории в нужной ветке внесите необходимые изменения в существующий код. О правилах и стиле кода читайте ниже. Когда Вам захочется "сохранить" свой репозиторий и впечатать его версию в ткань мироздания - сделайте коммит. Чтобы добавить файлы в коммит, используйте git add <file>, чтобы удалить из коммита git rm <file>. Отправка готового коммита осуществляется через

git commit -m 'commentary message'

В комментарии рекомендуется указывать важные изменения, входящие внутрь коммита.

Также для коммитов можно использовать не только терминал, но и, например, TortoiseGit, расширение для PyCharm, Github Desktop, SourceTree или особую вкладку в Atom. Ну или другие приложения для работы с Git.

Рекомендуется делать коммиты достаточно часто. Желательно - практически каждый раз, когда Вы собираетесь что-либо поменять. Как показывает практика, система контроля версий всегда будет более хорошим вариантом "сохранения", нежели просто нажатие Cmd/Crtl + S. Важные коммиты стоит сопровождать комментариями (флаг -m). Промежуточные коммиты можно делать без комментариев.

Важно

При работе с кодом, не забывайте регулярно подтягивать изменения с помощью git pull upstream из оригинального репозитория, чтобы посмотреть, что произошло с кодом без Вас. Так как Вы создали локально новую ветку, на Ваш код это не повлияет, а вот код в других ветках может измениться. Это будет полезно на последнем шаге.

5. Push the repo

Когда Вам захочется залить Ваш локальный репозиторий на свой репозиторий в сети, нужно выполнить соответствующую команду:

git push

Все закоммиченные с момента последнего пуша (все версии Вашего репозитория с момента последнего пуша) изменения будут залиты на сервер с Вашим репозиторием. Все новые, созданные локально, ветки будут также созданы на сервере, если будут "запушены" коммиты, состоящие в этих ветках.

6. Pull-request

Самым важным этапом будет сдача работы. Для этого надо запросить pull-request у оригинального репозитория. Согласно правилам, описанным выше, делать pull-request можно только в ветку TrashCan.

Для этого нам надо зайти на GitHub, в свой репозиторий-форк оригинала и нажать на кнопку pull request. В качестве отправляемой ветки выберите свою созданную feature-ветку. В качестве цели, в которую Вы пытаетесь запросить пулл-реквест, выберите TrashCan. После пулл-реквеста Вы попадёте на новую страницу, где будет показана история Вашего пулл-реквеста. Здесь будут оставляться комментарии относительно Вашего запроса. Также здесь можно посмотреть, слиты ли изменения Вашей ветки с оригинальной.

Если Ваши изменения приняли - празднуйте успешную сдачу задания. Если появились комментарии, в которых Вас попросили что-то изменить, смело меняйте, коммитьте и затем пушьте - пулл реквест обновится автоматически. Повторять, пока код не примут, или пока админ не устанет.

⚠️ **GitHub.com Fallback** ⚠️