说我有以下命令序列:
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锁定工作树?
答案 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