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 true
或 git config my.post-merge false
。在挂钩中,检查 git config --get my.post-merge
的值。另一种方法是更改钩子的名称,如 mv .git/hooks/post-merge .git/hooks/post-merged
。需要的时候再改回来。
我有一个 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 true
或 git config my.post-merge false
。在挂钩中,检查 git config --get my.post-merge
的值。另一种方法是更改钩子的名称,如 mv .git/hooks/post-merge .git/hooks/post-merged
。需要的时候再改回来。