我经常发现我使用git add -p
进行一些部分更改,然后用git commit -a
提出它们的习惯。然后我必须重置并重新开始。现在,我希望在使用git commit -a
并且某些文件已经上传时会看到警告。我试图为此编写一个预提交钩子,但--all
将之前的所有分段挂钩,因此它无法工作。
有可能实现这个目标吗?
答案 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
}
我不喜欢像这样棘手的东西;我发现重新编程手指会更好。 :-)但是你的里程可能会有所不同,正如他们所说的那样。