Гигиена в Git
Несколько правил, чтобы держать Git приличном виде.
Одна задача — один коммит. Слияние ветки происходит только через squash, другие методы запрещены.
В сообщении к коммиту указан только номер задачи и ее заголовок, например
[FOOBAR-123] Make some crap
. Иная графомания нежелательна — идите за ней в
задачу.
Перед слиянием коммиты переносят наверх с помощью rebase относительно родителя. Так вы лишний раз убедитесь, что все в порядке.
После слияния ветка удаляется автоматом.
У каждого PR есть expire. Висит две недели — значит никому не нужен и удаляется автоматом. В следующий раз команда будет расторопней.
Чем больше веток — тем хуже. В идеале это master с тегами релизов и feature-ветки. И больше ничего.
Пуш в мастер запрещен всем, кроме одного человека (техдиректора).
Слияние без апрува запрещено (а лучше двух).
Kdiff3 — пожалуй, лучшее средство разрешения конфликтов:
> brew install --cask kdiff3
# ~/.gitconfig
[merge]
tool = kdiff3
[diff]
tool = kdiff3
[mergetool "kdiff3"]
path = /Applications/kdiff3.app/Contents/MacOS/kdiff3
[difftool "kdiff3"]
path = /Applications/kdiff3.app/Contents/MacOS/kdiff3
UPD Ограничение на один коммит не касается локальной ветки, в которой вы пилите задачу. Их может быть хоть два, хоть двести. Важно, что при слиянии методом squash они объединяются, и в главной ветке остается один коммит с номером задачи.
Бывает, коллега делает задачу неделями и после аппрува жмет “Merge”. В истории оказывается 50+ коммитов с подписями “working”, “fix tests”, “fix linter”, “updated” и так далее. Спрашивается, зачем это команде? В своей ветке делай что хочешь, а в общей соблюдай приличия.
Нашли ошибку? Выделите мышкой и нажмите Ctrl/⌘+Enter
ВсёПоДелу, 8th Jun 2023, link
В свое время пробовал много разных программ для дифов/мёржей и остановился на “Beyound Compare”(https://www.scootersoftware.com).
Он платный, но ни разу не пожалел о покупке (а даже наоборот).
Евгений, 8th Jun 2023, link
На мой взгляд, рекомендации - да, но никак не правила. Графомания в коммите может ответить на вопрос “почему?”. Идти за ней в задачу может быть неудобно - вот код, он здесь, зачем мне куда-то ещё ходить? Ну и плюс все это может исчезнуть(скажем, после перехода с редмайна на джиру, а потом с джиры в гитхаб или ещё куда), либо быть недоступным.