编写我自己的脚本来解决合并时的 git 冲突

Tim*_*lis 5 git merge

问题

有没有办法编写一个脚本来挂钩 git 的合并过程,并在合并时自动解决以下合并冲突?

设想

我们有一个由 git 版本控制的文件,其中(除其他外)包含必须具有递增整数值的定义。

MY_CONSTANT = 0xB;
ANOTHER_CONSTANT = 0xC;
Run Code Online (Sandbox Code Playgroud)

这个文件经常被多个开发人员同时编辑,合并起来很痛苦:

开发人员 1 补充道:

DEV1_CONSTANT = 0xD;
Run Code Online (Sandbox Code Playgroud)

开发者 2 补充道:

DEV2_CONSTANT = 0xD;
Run Code Online (Sandbox Code Playgroud)

合并时,我们实际上希望文件看起来像:

MY_CONSTANT = 0xB;
ANOTHER_CONSTANT = 0xC;
DEV1_CONSTANT = 0xD;
DEV2_CONSTANT = 0xE;
Run Code Online (Sandbox Code Playgroud)

(最后一行已更改为0xE。)

然而,git 产生了合并冲突(正如预期的那样)。我希望自动解决此文件上的冲突。

mia*_*t17 3

参考githook文档。阅读钩子的说明post-merge

该钩子不会影响 git merge 的结果,如果由于冲突而合并失败,则不会执行该钩子。

在当前版本的 git 中,没有类似merge-conflict-hook.

但是,您仍然可以实现自己的脚本来处理此问题。伪代码可能是这样的:

system('git fetch origin master')
status = system('git merge origin/master')
if status!=0 && check_enum_conflict()
  resolve_enum_conflict()
end
Run Code Online (Sandbox Code Playgroud)

实际的实施将相当复杂。你需要:

  1. 编写一个脚本来执行git命令。
  2. 检查合并结果。查看枚举文件是否有冲突。
  3. 解析枚举文件并尝试以编程方式解决冲突。
  4. 处理所有可能的情况。前任。如果其他文件也冲突怎么办?

这将是一项非常复杂的工作。如果你认为值得就去做吧。