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

时间:2012-10-05 11:21:32

标签: git merge

问题

有没有办法编写一个可以挂钩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会产生合并冲突(如预期的那样)。我希望自动解决此文件上的冲突。

2 个答案:

答案 0 :(得分:1)

请参阅githook文件。阅读post-merge hook的描述:

  

如果由于冲突导致合并失败,则此挂钩不会影响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. 处理所有可能的情况。防爆。如果其他文件也有冲突怎么办?
  5. 这将是非常复杂的工作。如果您认为值得,请这样做。

答案 1 :(得分:0)

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

对我而言,听起来你并不关心每个常数分配哪个值,只要它们不同并递增。您是否考虑对这些常量使用枚举,并让编译器在编译时分配枚举常量的值?

我想发布一个示例,但您没有提到您正在使用的编程语言。