git - 如何避免本地分支机构的意外 dcommit

标签 git git-svn git-branch dcommit

有时,我在 git 中创建本地分支,当我尝试从它们提交 dcommit 时,我想收到一条警告消息。

如何防止自己不小心从本地分支提交?

最佳答案

如果您使用的是 Linux(或 Git bash 或 Cygwin 或类似软件),预提交 Hook 的替代方法是将 git 包装在 shell 辅助函数中。将以下内容添加到您的 ~/.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 "$@"
}

(我在 Red Hat 上用 bash 和 zsh 测试过,在 Cygwin 上用 bash 测试过)

无论何时调用 git,您现在都将调用此函数,而不是普通的二进制文件。该函数将正常运行 git,除非您在附加到非 master 分支时调用 git svn dcommit。在这种情况下,它会提示您在提交之前进行确认。您可以通过显式指定 git 的路径来覆盖该函数(这就是 $real_git 正在做的事情)。

请记住,在更新 ~/.bashrc 或等效文件后,您需要重新加载它,方法是启动一个新的 shell session (注销并再次登录)或运行 来源 ~/.bashrc.

编辑:作为增强,您可以删除第一行,开始 real_git=,并将 $real_git 的其他实例替换为command git,它以首选方式实现了相同的目的。我没有更新脚本本身,因为我无法在 zsh 上测试更改。

关于git - 如何避免本地分支机构的意外 dcommit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9226528/

相关文章:

Git 文件在 checkout 、重置 --hard 等后被修改,即使 autocrlf 设置为 false

git - 重新同步已编辑的 Flutter 源文件

git - msysgit git-am 无法应用它自己的 git 格式补丁序列

git - 从 master 重新建立子分支

git - 如何 Git diff 两个分支但显示类似于 Git 提交的输出?

GitHub - 无法连接到 github 443 窗口/无法连接到 gitHub - 没有错误

git - 克隆git repo时设置多个 'automatic' remote

git - 使用当前更改创建 Git 分支

git svn dcommit 总是以 "Cannot dcommit with a dirty index."失败

svn - 将 GIT merge 功能移植到 SVN?