【问题标题】:Pre-commit hooks getting partial committed file list预提交钩子获取部分提交的文件列表
【发布时间】:2012-08-29 03:35:17
【问题描述】:

我知道运行 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

pre-commit 钩子如何只获取两个文件的列表?

【问题讨论】:

    标签: git pre-commit-hook


    【解决方案1】:

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

    【讨论】:

    • 我刚试了一下,发现在脚本触发之前索引已经更新,这样我就可以使用 git diff --cached 来获取我需要的文件。非常感谢。
    【解决方案2】:

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

    而且 [我刚刚发现了钩子,看起来很酷] 显然,在你运行 git commit 之前就触发了预提交钩子(你仍然可以尝试将“Hello World”脚本连接到它以准确查看它何时被触发)。

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

    我不确切知道如何检索已添加文件的列表(可能通过索引),但希望这会对您有所帮助

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

    【讨论】:

    • 谢谢,我才意识到脚本执行的时刻非常关键。
    猜你喜欢
    • 2012-04-27
    • 2018-05-21
    • 2013-12-15
    • 2017-02-08
    • 2016-09-02
    • 2022-01-07
    • 2015-03-04
    • 1970-01-01
    相关资源
    最近更新 更多