【问题标题】:How to program git to do things before commit?如何在提交之前对 git 进行编程以执行操作?
【发布时间】:2016-08-17 23:48:19
【问题描述】:

我一直在查看 git hooks 但无法弄清楚:当用户将文件提交到我的 git 存储库时,我想自动更新 repo 中的另一个文件并将这些更改添加到同一个提交,并且还根据提交消息中的内容运行一些命令。有没有办法做到这一点? pre-commit git 钩子似乎在生成提交消息之前运行。

【问题讨论】:

    标签: git githooks


    【解决方案1】:

    可以做到这一点,使用prepare-commit-msg钩子......但不要。这很困难且容易出错,对于熟悉 Git 但不熟悉您的特定项目的人来说,这会有些令人惊讶。 (那个人可能是你自己,几年后:我知道这一点,因为它发生在我身上。:-) 不是专门针对 Git,但基本上是相同的问题:我想出了一个短期的 hack,并把它留在地方,很久以后,当一些行为不端时我感到震惊,只是为了追溯到我自己的短期黑客行为。)

    相反,编写一个小脚本来完成您想做的所有事情,包括运行git commit,并为未来的维护者(可能是您自己)留下关于如何运行该小脚本的说明。然后,您可以将脚本包含在项目的 Git 存储库中,以便每个人都拥有它。

    【讨论】:

    • 创建一个运行git commit的脚本...这是一个有趣的想法。但是,我希望能够将它与像 SourceTree 这样的 Git GUI 应用程序一起使用,所以我不知道这是否是一个选项。创建prepare-commit-msg 脚本是一个坏主意,除了(可能是聪明的想法)如果我忘记它在未来如何工作可能会成为问题之外,还有什么理由?
    • 到prepare-commit-msg脚本运行的时候,至少有些版本的Git已经决定了哪些文件要进入commit,所以要修改文件集,就必须修改索引,运行 new 提交(禁用脚本上的递归),然后使外部提交失败。我做了一次这项工作,但即使在我预期的时候使用它也令人困惑,并且对git commit --amend 表现不佳。从那时起,Git 被修改为在早期的钩子运行后重新检查索引,这使得它不那么混乱,但仍然有点棘手。它通常也与git add -p 一起玩得很糟糕。
    猜你喜欢
    • 2022-06-15
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2014-11-16
    • 1970-01-01
    相关资源
    最近更新 更多