4

问题

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

设想

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

MY_CONSTANT = 0xB;
ANOTHER_CONSTANT = 0xC;

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

开发人员 1 补充说:

DEV1_CONSTANT = 0xD;

开发人员 2 补充说:

DEV2_CONSTANT = 0xD;

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

MY_CONSTANT = 0xB;
ANOTHER_CONSTANT = 0xC;
DEV1_CONSTANT = 0xD;
DEV2_CONSTANT = 0xE;

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

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

4

2 回答 2

3

参考gitook文档。阅读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

实际的实现会相当复杂。你需要:

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

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

于 2012-10-07T08:19:21.530 回答
0

没有版本控制系统可以自动解决这些冲突,因为它无法知道这些值在任何地方都无关紧要。

在我看来,只要它们不同且递增,您就不会关心分配给每个常量的值。您是否考虑过为这些常量使用枚举并让编译器在编译时分配枚举常量的值?

我想发布一个示例,但您没有提及您使用的是哪种编程语言。

于 2012-10-05T11:37:23.933 回答