2012-04-15 76 views
7

我开发验证和掉毛实用与各种整合提交挂钩,包括Git的一个Git的pre-commit钩子:

https://github.com/miohtama/vvv

目前验证器和棉短绒是针对整个运行修改过的文件越来越名单项目代码库在每个提交。但是,仅仅针对更改的文件运行它们会更加优化。对于这一点,我需要知道在我的Git预提交钩(在Python)

https://github.com/miohtama/vvv/blob/master/vvv/hooks/git.py

我有什么选择提取修改过的文件列表(在Python,如果该事项)修改过的文件列表?

回答

5

的pre-commit钩子是一个有点痛,如果你真的想工作的事情“正确的”,因为在工作中树什么的并不一定一致,那么将被提交:

$ echo morestuff >> file1; echo morestuff >> file2 
$ git add file1 # but not file2 
$ git commit -m 'modified two files but check in just one' 

您可以使用git diff-index --cached HEAD获取“要检入的内容”的列表。另见例如http://newartisans.com/2009/02/building-a-better-pre-commit-hook-for-git/

+0

对于文章链接:相当的痛苦,以保持存储库的第二个副本只是为了检查什么文件已经改变:( – 2012-04-15 18:26:08

+0

你不需要第二个副本的回购,但你可以(取决于你),需要第二个工作树,基本上有两种选择:在其他地方检查索引,以便得到一个与正在检查的工作树匹配的工作树;或者,验证当前工作树是否是“干净的” “,以便您可以使用当前目录(预提交挂钩在工作树中运行)。 – torek 2012-04-15 20:30:37

+0

目前为止完美工作。以下是完整的解决方案https://github.com/miohtama/vvv/blob/ master/vvv/hooks/git.py – 2012-05-12 00:57:40