3

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

比如我修改了三个文件,只提交了两个,我想让 pre-commit 钩子知道这两个文件的名字。

git status --porcelain

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

然后我执行:

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

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

4

2 回答 2

7

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

于 2012-08-29T09:38:15.577 回答
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

于 2012-08-29T08:51:07.710 回答