2012-08-29 122 views
3

我知道运行git-diff和其他工具可以识别存储库中的更改,但是当我进行部分提交时,我只需要传递提交的文件(而不是整个被触摸的文件集)到预先提交的钩子。预提交挂钩获取部分提交的文件列表

例如,我修改了三个文件,只提交了两个文件,并且我想让预提交钩子知道这两个文件的名称。

git status --porcelain 

M A.c 
M B.c 
M C.h 

然后我执行:

git commit -m "two files only" A.c B.c 

如何能在pre-commit钩子只得到了两个文件列表的持有?

回答

6

预提交在提交过程开始运行...... // @文斯的链接是一个来看看。钩子运行后,您的脚本可以使用git diff --cached --name-only获取预先提交脚本中的分阶段文件的名称。即使用户已经为提交进行了更多操作,但只需要在命令行上提交文件的子集,该命令仍可正常工作。

+1

我刚刚试过这个,发现在脚本被触发之前索引已经更新,所以我可以使用git diff --cached来获取我需要的文件。非常感谢你。 –

+0

不客气! – jszakmeister

0

我认为你的问题更多:什么时候触发预提交钩子?

[我刚刚发现了钩子,看起来很酷],显然,在你运行git commit之前触发预提交钩子(你仍然可以尝试连接一个“Hello World”脚本以查看它的确切时间触发)。

但是我能想到的是add命令:git add -u A.c B.c(u代表更新)。一旦你运行它,commit命令将提交这些文件(只是运行git commit -m mymessage

我不知道如何检索添加文件的列表(可能通过索引),但希望这会帮助你

参考:http://git-scm.com/book/en/Customizing-Git-Git-Hooks

+0

谢谢我刚才意识到脚本执行的时刻非常关键。 –