-
Notifications
You must be signed in to change notification settings - Fork 3
Workflow
Здесь описан процесс работы с трекером и системой контроля версий.
Мы используем трекер https://github.com/it-workshop/caroline/issues для постановки задач. Любой код должен быть связан с какой-либо задачей. Задача ассигнится на одного конкретного человека, который ее будет делать. Если не понятно, на кого поставить задачу, можно аставить её ничейной, значит в ближайшее время нужно будет обсудить её и решить, кто будет её делать.
Для упрощения нам жизни, мы используем систему воркпэккэджей. Что это значит: каждая задача бьется на n частей, каждая из которых делается отдельным wp. Каждый wp делается в отдельной ветке git репозитория. Предполагается, что над каждой веткой работает только один человек и может творить с ней любой беспредел (git commit --amend, git rebase, git reset --hard, git push -f, etc.), и это никак не затронет остальных людей, работающих над проектом. Также предполагается, что каждый workpackage делается не больше недели.
Что это дает:
- Свободу действий в рамках своей ветки;
- Короткие итерации работы над проектом;
- Все работают над боле-менее свежим состоянием исходного кода;
- Все задачи изолированы друг от друга;
- Все изменения проходят через ревью.
Итак, каждый wp живет в отдельной ветке под именем wp/${номер задачи}/${номер wp в рамках этой задачи}. Никто ничего не коммитит напрямую в мастер. Никто не мерджит свои ветки в мастер самостоятельно. После того, как работа над wp закончена, ветка заливается в основной репозиторий и создается пулл-реквест.
Пулл-реквесты — основной способо влияния кода в основную ветку проекта. созданный пулл-реквест должен пройти ревью. Ревьювер должен оценить решение задачи, может дать комментарий по тому, как можно было сделать лучше и почему, а также указать на ошибки в стиле или логике. Ревьювер не является истиной в последней инстанции. Если ревьювер не прав, нужно объяснить почему. Ревью — это инструмент для обмена опытом между членами команды. Любые изменения в ветке при этом делает только автор изменений. Ревьювер не должен все переделывать, потому что он считает, что так правильнее. Ревьювером может быть любой.
По хорошему, перед мерджем пулл-реквеста, нужно проверить, что ветка собирается на всех платформах и на всех платформах успешно проходят тесты. В будующем мы возможно сделаем это дело автоматическим, но это пока мечты. Поэтому стоит прогонять сборку/тесты на всех доступных платформах.
Краткая последовательность действий разработчика при работе над задачей. В тексте ниже N — номер задачи, M — номер workpackage.
Q. Итак, на меня повесили задачу #N, и я готов начать ее делать, что я делаю?
A. Первым делом нужно открыть задачу на гитхабе, внимательно прочитать и понять, что требуется сделать. Поставить метку "In Progress" (метки находятся справа на странице задачи). После этого можно нужно открыть командную строку, перейти в директорию с кодом проекта, подтянуть свежие изменения и создать ветку. M будет равен единице.
git fetch origin && git checkout -f origin/master -B wp/N/M
Теперь можно работать над кодом.
Q. Я думаю, что задача решена, что делать дальше?
A. Нужно закоммитить изменения.
git add <список файлов, в которых мы что-то поменяли, через пробелы>
git commit -m "#N: <комментарий к данным изменениям>."
Стоит обратить внимание, что в момент git commit проверяется стиль файлов, стоит убедиться, что код действительно был закоммичен, иначе придется исправить ошибки и повторить исполнение этих двух комманд.
Q. Я закоммитил изменения, что теперь?
A. Нужно загрузить изменения на гитхаб и создать пулл-реквест.
git push -u origin wp/N/M
Идем на страницу https://github.com/it-workshop/caroline/pulls, и жмем на кнопочку "New pull request", выбираем свою ветку и создаем пулл-реквест. Также стоит зайти на страницу своей задачи, убрать метку "In Progress" и добавить метку "On Review".
Q. Все готово?
A. Нет, нужно сообщить о своем пулл-реквесте другим участникам проекта. Они должны просмотреть изменения, при этом они могут написать свои замечания, которые необходимо исправить (для чего нужно закоммитить изменения и снова загрузить их на гитхаб, пулл-реквест обновится автоматически). Когда пулл-реквест будет устраивать ревьюверов, его можно вмерджить в основную ветку проекта.