我知道运行git-diff和其他工具可以识别存储库中的更改,但是当我进行部分提交时,我只需要将已提交的文件(而不是触及的整个文件集)传递给预先提交钩子。
例如,我修改了三个文件并只提交了两个,我希望预提交钩子知道这两个文件的名称。
git status --porcelain
M A.c
M B.c
M C.h
然后我执行:
git commit -m "two files only" A.c B.c
预提交挂钩如何才能获取两个文件的列表?
答案 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
)
我不知道你究竟如何检索添加文件的列表(可能是通过索引),但希望这会对你有所帮助