Git预提交挂钩或选项,用于在使用--all并且文件已经暂存时发出警告

时间:2014-04-02 16:15:55

标签: git

我经常发现我使用git add -p进行一些部分更改,然后用git commit -a提出它们的习惯。然后我必须重置并重新开始。现在,我希望在使用git commit -a并且某些文件已经上传时会看到警告。我试图为此编写一个预提交钩子,但--all之前的所有分段挂钩,因此它无法工作。

有可能实现这个目标吗?

1 个答案:

答案 0 :(得分:0)

不在git中。您可以编写一个前端脚本,您可以将其称为git,然后将其放在" real"前面的路径上。 git的;或者使用shell别名git,它会调用" real" git,但首先检查子命令是否为commit,如果是,是否存在参数-a,如果是,则是否存在某些阶段性更改。为了使这个超级可靠,你必须复制所有git的参数解析,但是一个便宜又脏的sh / bash风格别名如下:

git() {
    [ x"$1" = xcommit -a x"$2" = x-a ] &&
        git_index_has_changes &&
        { echo "you have staged changes, can't use -a"; return 1; }
    command git $@
}
git_index_has_changes() {
    ! git diff-index --quiet --cached HEAD --ignore-submodules
}

我不喜欢像这样棘手的东西;我发现重新编程手指会更好。 :-)但是你的里程可能会有所不同,正如他们所说的那样。