Git 并在合并时更新文件内容

Git and updating a file's contents when merging

我有一个 git 存储库,其中包含用 C 编写的代码。其中一个文件是 Version.c 文件,其中包含行

#define Version_Build  "0"     

我有一个脚本可以找到这一行并将数字 0 递增到下一个整数。该脚本是用 Perl 编写的,但我可以轻松地使用 awk 或 sed。

我想在 git 分支合并到 master 时自动触发脚本。我认为服务器端挂钩是正确的方法。但是,我不确定这是否是最好的方法?

例如,是否需要git commit 或git add 才能在master 分支上执行?假设这是最好的方法,你能推荐合适的钩子类型吗?或者有更好的方法来解决同样的问题吗?

有一个挂钩 post-merge,可以由 git merge 调用。但它在本地仓库中有效。

如果您希望 Git 跟踪更改,是的,您需要添加并提交它。这不适合在远程仓库中完成。

在这个钩子中,你可以检查当前分支是否为master。如果是,请进行更改、添加并提交。如果没有,就什么都不做。

一旦部署,git merge 的任何选项都无法绕过此挂钩,这有时可能会很烦人。如果你想禁用钩子,有一些方法可以完成这项工作。在钩子内部设置一个可达的标志变量,检查它的值并继续。您可以在 git merge 之前导出环境变量并在之后取消设置。或者,您可以设置一个自定义的配置键。例如,预先 git config my.post-merge truegit config my.post-merge false。在挂钩中,检查 git config --get my.post-merge 的值。另一种方法是更改​​钩子的名称,如 mv .git/hooks/post-merge .git/hooks/post-merged。需要的时候再改回来。