如何设置预提交钩子,它将在提交的文件中搜索字符串,如果发现停止提交?Mercurial pre commit hook
回答
的the mercurial bookChapter 10覆盖该恰好:
$ 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]$'
更改为您要查找的任何字符串即可。
好的,当然我现在发现了这个例子,但它是如何工作的?为什么我需要 - > hg输出提示,这是什么回报(!egrep -q'^ \ +。* [\ t] $')? – danidacar 2010-11-12 19:40:23
仅供参考,如果您没有为每次提交添加标签(即通过'-A') – 2013-02-27 08:01:38
这是一个对大多数开发人员来说很糟糕的例子:使用shell脚本和egrep。大多数工作环境中的开发人员对这些东西都感到不舒服 - 对于很好的近似,没有人使用它 - 进一步没有解释或确定从这个例子中,哪些参数不会被传递到钩子上... – jheriko 2013-09-05 15:01:50
Ry4an的回答几乎正确:) 但您需要将“hg export tip”替换为“hg diff”。
tip是最后一个提交的changeset,但对本地uncommited更改感兴趣 - 所以diff是你需要的。 我需要添加以下到我hgrc
precommit.removeDebug = hg diff -S | grep -v '^-' | (! egrep '(var_dump)|(exit)|(print_r)')
了-S包括subrepos(马爷不需要,也可以是静止电瓶车)。
grep -v'^ - '从diff中删除指示已删除行的行。 我删除了-q,所以我至少有一个想法什么要删除,但不幸的是,这种方法不能打印你的文件和出现的细麻布(因为它是管道)。也许有人有更好的方式来做到这一点。
我支持我的回答。 :)本地更改已在'pretxncommit'书籍运行之前提交 - 它是在工作之后但事务提交之前提交的,因此'hg export tip'可以正常工作,并在钩子拒绝时回滚。 – 2013-02-27 17:02:51
'hg export tip'的工作正常,我同意,但纯粹根据我自己非常不科学的观察结果,'hg diff'稍微快一点。 – gzzzur 2015-05-20 09:21:33
顺便说一句,在Windows中可以使用
[hooks]
pretxncommit.nocommit = hg export tip | findstr NOCOMMIT && EXIT /B 1 || EXIT /B 0
这个钩子,如果你的源代码中包含字符串“NOCOMMIT”
- 1. Gitlab pre-commit hook
- 2. Eclipse Subversive/Subclipse pre-commit hook
- 3. 为什么我的mercurial pre-commit hook工作在MinGW
- 4. 我可以跳过像git一样的mercurial pre-commit hook吗?
- 5. Svn import with auto-props&pre-commit hook
- 6. git python pre-commit hook添加文件
- 7. Mercurial pre-push hook扫描工作副本
- 8. svn:post commit hook
- 9. Subversion post-commit hook
- 10. post commit hook fail
- 11. 我可以从bzr post/pre-commit hook更改固定的bug吗?
- 12. 用git pre-commit hook修复mac/windows新行?
- 13. git pre-commit hook,将文件添加到索引
- 14. 为什么git的pre-commit hook会验证HEAD是否存在?
- 15. Svn pre-commit hook不允许在非根目录下使用svn:mergeinfo
- 16. Subversion:在pre-commit hook中获取用户的ip地址?
- 17. Mercurial Commit Charts/Graphs
- 18. Subversion post commit to tags hook
- 19. 为Redmine设置git commit hook
- 20. SVN Granule post commit mail hook
- 21. 设置svnperms pre-commit钩子
- 22. SVN pre-commit问题
- 23. Mercurial Commit with Python主函数
- 24. 为什么在pre-commit hook中执行git add后索引不会更新?
- 25. 如何在SVN中使用pre commit hook来返回版本库的版本号?
- 26. git pre-commit时忽略eslint错误
- 27. SVN pre-commit钩子编码
- 28. Git的pre-commit钩子:
- 29. Git Post Commit Hook获取提交编号
- 30. svn post-commit hook第一个定时器
在我看来,这将不利于分散仓库的概念将会失败。您的存储库可能会被克隆到其他系统的不同系统中,并且您的脚本可能无法在此工作。也许预先推钩会更好?我有兴趣听到你的问题的答案。 – 2010-11-12 08:00:12
我有一个中央存储库,人们正在推送。我只需要确保在我推送它们之前所做的提交都是干净的。 – danidacar 2010-11-12 08:24:48
尝试检查http://www.selenic.com/mercurial/hgrc.5.html#hooks – 2010-11-12 08:29:26