锁定本地git分支以防止任何进一步的更改

时间:2018-09-01 00:52:47

标签: git git-checkout

说我有以下命令序列:

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 :(得分:3)

我们如何自己推出此功能?让我们从您的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可执行。

答案 1 :(得分:1)

要锁定分支,可以使用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