如何设置预提交挂钩,它将在提交的文件中搜索字符串,如果找到则停止提交?
问问题
11312 次
3 回答
24
$ cat .hg/hgrc
[hooks]
pretxncommit.whitespace = hg export tip | (! egrep -q '^\+.*[ \t]$')
$ echo 'a ' > a
$ hg commit -A -m 'test with trailing whitespace'
adding a
transaction abort!
rollback completed
abort: pretxncommit.whitespace hook exited with status 1
$ echo 'a' > a
$ hg commit -A -m 'drop trailing whitespace and try again'
在这个例子中,我们引入了一个简单的 pretxncommit 钩子来检查尾随空格。这个钩子很短,但不是很有帮助。如果更改将带有尾随空格的行添加到任何文件,它会以错误状态退出,但不会打印任何可能帮助我们识别有问题的文件或行的信息。它还有一个很好的特性,就是不关注未修改的线条;只有引入新的尾随空格的行才会导致问题。
只需将正则表达式从更改为'^\+.*[ \t]$'
您要查找的任何字符串。
于 2010-11-12T17:13:58.023 回答
5
Ry4an 的回答几乎是正确的 :) 但您需要将“hg export tip”替换为“hg diff”。
tip 是最后提交的变更集,但对本地未提交的更改感兴趣 - 所以 diff 是你需要的。为了我的需要,我将以下内容添加到我的 hgrc
precommit.removeDebug = hg diff -S | grep -v '^-' | (! egrep '(var_dump)|(exit)|(print_r)')
-S 包括子存储库(可能不需要,并且可能仍然存在问题)。
grep -v '^-' 从差异中删除指示已删除行的行。我删除了 -q 所以我至少知道要删除什么,但不幸的是,这种方法无法打印你出现的文件和行号(因为它是通过管道传输的)。也许有人有更好的方法来做到这一点。
于 2011-03-03T09:56:46.873 回答
5
顺便说一句,在 Windows 上你可以使用
[hooks]
pretxncommit.nocommit = hg export tip | findstr NOCOMMIT && EXIT /B 1 || EXIT /B 0
如果您的来源包含字符串“NOCOMMIT”,此挂钩将失败
于 2014-01-27T15:00:23.117 回答