预提交钩子获取部分提交文件列表

时间:2012-08-29 03:35:17

标签: git pre-commit-hook

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

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

git status --porcelain

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

然后我执行:

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

预提交挂钩如何才能获取两个文件的列表?

2 个答案:

答案 0 :(得分:6)

预提交是在提交过程开始时运行的... @ Vince的链接是要查看的链接。挂钩运行后,您的脚本可以使用git diff --cached --name-only在预提交脚本中获取暂存文件的名称。即使用户已提交了更多用于提交的命令,该命令仍然有效,但仅请求在命令行上提交文件的子集。

答案 1 :(得分: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