Блокировка локальной ветки git от любых дальнейших изменений - PullRequest
0 голосов
/ 01 сентября 2018

Скажите, у меня есть эта последовательность команд:

current_branch="$(git rev-parse --abbrev-ref HEAD)"
git checkout -b "foo"
git lock "$current_branch"   # i made this up

я хочу заблокировать ветку, чтобы я не смог случайно внести в нее изменения после того, как с ней покончено. Например, после того, как ветвь объекта была сдвинута и объединена с веткой интеграции.

Есть ли способ сделать это с помощью git? Возможно, есть способ заблокировать рабочее дерево, используя https://git -scm.com / docs / git-worktree ?

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Как насчет того, чтобы мы выполнили эту функцию сами? Давайте начнем с вашей команды 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.

0 голосов
/ 01 сентября 2018

Чтобы заблокировать ветку, вы можете использовать git hooks. Проверьте это SO .

#!/bin/sh
# lock the myfeature branch for pushing
refname="$1"

if [[ $refname == "refs/heads/myfeature" ]]
then
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    echo "You cannot push to myfeature! It's locked"
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    exit 1
fi
exit 0
...