GIT: ff-only merge

Если что-то мне не нравится при использовании github/bitbucket, как тулзу для код ревью, это merge commit. Fabien Potencier пошутил на конференции, что раньше он был главным контрибьютером, а теперь главным мерж коммитером.

Не хочется вдаваться в детали a-successful-git-branching-model, но там советуют использовать всегда --no-ff c merge commit.

В моем окружении пришли к выводу, что пользы нет никакой. После длительного совещания решили на новом проекте использовать только ff-only. В этом случае не создается merge commit, но накладывается ограничение на ветку, она всегда должна быть актуальной. То есть вам всегда нужно делать rebase, даже если нет конфликтов.

В итоге merge PR всегда представлял нечто такое:

git fetch amazing-developer
git checkout -b TICKET-1001 --track amazing-developer/TICKET-1001
git rebase develop
git push amazing-developer TICKET-1001 -f
git checkout develop
git merge --ff-only amazing-developer/TICKET-1001
git branch -D TICKET-1001
git push amazing-developer :TICKET-1001

Есть у меня подозрения, что на гитхабе четвертая строка не нужна, но у битбакета с этим проблемы. Поэтому админ вынужден иметь write доступ на форки.

И так вот мы работали почти год, никаких проблем не возникало при применении такой политики. Неделю назад я решил написать простой bash script.

#!/usr/bin/env bash
clear
echo "Merge code tool"
echo "Please, specify remote repository"
read REPOSITORY
git fetch $REPOSITORY
echo "Please, specify branch"
read BRANCH
git checkout -b $BRANCH --track $REPOSITORY/$BRANCH
git rebase develop
read -p "Do you want to continue? (y/n): " REPLY
if [ $REPLY != 'y' ]; then
  exit 0;
fi
git push $REPOSITORY $BRANCH -f
git checkout develop
git merge --ff-only $REPOSITORY/$BRANCH
git push origin develop
git branch -D $BRANCH
read -p "Remove remote branch? (y/n): " REPLY
if [ $REPLY = 'y' ]; then
  echo "Removing $REPOSITORY/$BRANCH"
  git push $REPOSITORY :$BRANCH
fi

Он делает за вас рутиный ввод команд в консоли, но не отменяет работу головой.

Комментарии