如何设置预提交挂钩,将在已提交的文件中搜索字符串,如果找到则停止提交?
答案 0 :(得分:21)
$ 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]$'
更改为您要查找的任何字符串。
答案 1 :(得分:5)
Ry4an的答案几乎是正确的:) 但你需要用“hg diff”替换“hg export tip” tip是最后提交的变更集,但对本地未经修改的变更感兴趣 - 所以diff是你需要的。 为了我的需要,我将以下内容添加到我的hgrc
precommit.removeDebug = hg diff -S | grep -v '^-' | (! egrep '(var_dump)|(exit)|(print_r)')
-S包括subrepos(maye不需要,可能仍然有bug)
grep -v'^ - '从diff中删除指示已删除行的行。
我删除了-q所以我至少知道要删除什么,但不幸的是这个方法无法打印出文件和出现的亚麻(因为它是管道)。也许有人有更好的方法去做。
答案 2 :(得分:5)
BTW,在Windows上你可以使用
[hooks]
pretxncommit.nocommit = hg export tip | findstr NOCOMMIT && EXIT /B 1 || EXIT /B 0
如果您的源包含字符串“NOCOMMIT”
,则此挂钩将失败