如何設置預提交鉤子,它將在提交的文件中搜索字符串,如果發現停止提交?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