gre*_*ire 9 git git-svn dcommit git-branch
有时,我在git中创建本地分支,当我尝试从它们中提取时,我想收到一条警告消息.
如何防止自己意外地从当地分支机构撤职?
如果您正在使用Linux(或Git bash或Cygwin或类似的),则预提交挂钩的替代方法是包装gitshell辅助函数.将以下内容添加到您的~/.bashrc(对于bash,Git bash)或~/.zshrc(对于zsh)文件,或者对于您的shell的等价物:
real_git=$(which git)
function git {
if [[ ($1 == svn) && ($2 == dcommit) ]]
then
curr_branch=$($real_git branch | sed -n 's/\* //p')
if [[ ($curr_branch != master) && ($curr_branch != '(no branch)') ]]
then
echo "Committing from $curr_branch; are you sure? [y/N]"
read resp
if [[ ($resp != y) && ($resp != Y) ]]
then
return 2
fi
fi
fi
$real_git "$@"
}
Run Code Online (Sandbox Code Playgroud)
(我在Red Hat上使用bash和zsh进行了测试,并在Cygwin上进行了bash测试)
无论何时调用git,您现在都将调用此函数而不是正常的二进制函数.该函数将正常运行git,除非你在git svn dcommit连接到非master的分支时调用.在这种情况下,它会在提交之前提示您确认.您可以通过明确指定路径来覆盖该功能git(这就是它$real_git正在做的事情).
请记住,在更新~/.bashrc或等效之后,您需要通过启动新的shell会话(注销并再次登录)或运行来重新加载它source ~/.bashrc.
编辑:作为增强功能,您可以删除第一行,启动real_git=并替换$real_gitwith 的其他实例command git,这样可以实现相同的功能但是以首选方式实现.我没有更新脚本本身,因为我无法在zsh上测试更改.