【发布时间】:2016-08-17 23:48:19
【问题描述】:
我一直在查看 git hooks 但无法弄清楚:当用户将文件提交到我的 git 存储库时,我想自动更新 repo 中的另一个文件并将这些更改添加到同一个提交,并且还根据提交消息中的内容运行一些命令。有没有办法做到这一点? pre-commit git 钩子似乎在生成提交消息之前运行。
【问题讨论】:
我一直在查看 git hooks 但无法弄清楚:当用户将文件提交到我的 git 存储库时,我想自动更新 repo 中的另一个文件并将这些更改添加到同一个提交,并且还根据提交消息中的内容运行一些命令。有没有办法做到这一点? pre-commit git 钩子似乎在生成提交消息之前运行。
【问题讨论】:
你可以做到这一点,使用prepare-commit-msg钩子......但不要。这很困难且容易出错,对于熟悉 Git 但不熟悉您的特定项目的人来说,这会有些令人惊讶。 (那个人可能是你自己,几年后:我知道这一点,因为它发生在我身上。:-) 不是专门针对 Git,但基本上是相同的问题:我想出了一个短期的 hack,并把它留在地方,很久以后,当一些行为不端时我感到震惊,只是为了追溯到我自己的短期黑客行为。)
相反,编写一个小脚本来完成您想做的所有事情,包括运行git commit,并为未来的维护者(可能是您自己)留下关于如何运行该小脚本的说明。然后,您可以将脚本包含在项目的 Git 存储库中,以便每个人都拥有它。
【讨论】:
git commit的脚本...这是一个有趣的想法。但是,我希望能够将它与像 SourceTree 这样的 Git GUI 应用程序一起使用,所以我不知道这是否是一个选项。创建prepare-commit-msg 脚本是一个坏主意,除了(可能是聪明的想法)如果我忘记它在未来如何工作可能会成为问题之外,还有什么理由?
git commit --amend 表现不佳。从那时起,Git 被修改为在早期的钩子运行后重新检查索引,这使得它不那么混乱,但仍然有点棘手。它通常也与git add -p 一起玩得很糟糕。