Как насчет того, чтобы мы выполнили эту функцию сами? Давайте начнем с вашей команды git lock
. Мы можем написать это как псевдоним;
$ git config alias.lock "! touch .locks;
git rev-parse --abbrev-ref HEAD | cat - .locks | sort | uniq > .locks.tmp;
mv .locks.tmp .locks;"
Всякий раз, когда мы вызываем git lock
, мы собираемся добавить текущую ветвь в файл .locks
, который является нашим отдельным списком заблокированных ветвей.
Затем создайте (или отредактируйте) .git/hooks/pre-commit
для включения;
#!/bin/sh
if grep -Fxq `git rev-parse --abbrev-ref HEAD` .locks
then
cat <<\EOF
Error: Branch is locked
EOF
exit 1
fi
Который будет проверять файл .locks
каждый раз, когда мы фиксируем, чтобы убедиться, что мы не фиксируем заблокированную ветку.
Добавьте запись в свой .gitignore
, чтобы игнорировать наш новый файл .locks
, и все готово.
Пример использования;
adam@lime ~/git-lock $ git checkout -b MuhBranch
Switched to a new branch 'MuhBranch'
adam@lime ~/git-lock $ git commit -m "Final changes." --allow-empty
[MuhBranch 0304f21] Final changes.
adam@lime ~/git-lock $ git lock
adam@lime ~/git-lock $ git commit -m "Just one more..." --allow-empty
Error: Branch is locked
Не забудьте сделать ваш .git/hooks/pre-commit
исполняемым, используя chmod u+x .git/hooks/pre-commit
.