是否有任何合并工具可以自动合并对同一行所做的更改(但在不同的地方)

时间:2012-08-09 10:51:17

标签: git merge

这是一个特例,我知道在一般情况下(即计算机代码),将两个更改自动合并到不同分支中的同一行是不安全的。

然而,在这种情况下,所讨论的行是英语句子,并且变化是产品化。一个例子:

合并基地:

  

从您的iPhone或Android手机中查找推文,或撰写自己的推文!

分支1:

  

从iPhone或Android手机中找到%(PRODUCT:MESSAGE_PLURAL),或者发一条自己的推文!

分支2:

  

从您的iPhone或Android手机中查找推文,或撰写自己的%(PRODUCT:MESSAGE)!

这是手工合并的一个简单案例,但不幸的是,我们现在正在产生大量的这些冲突。那里有合并工具可以做到这一点吗? (或任何其他自动化此过程的方法)

1 个答案:

答案 0 :(得分:0)

我尝试在我选择的合并工具Araxis Merge中做到这一点,然后空了。

Beyond Compare论坛最近有一个关于此问题的问题:http://www.scootersoftware.com/vbulletin/showthread.php?t=9411注意Beyond Compare的开发人员甚至不知道有这样的工具。

两个选项:Araxis Merge和(我相信)Beyond Compare都允许您使用正则表达式控制合并结果。你可以探索一下。

另一个选项git diff branch1..branch2 -U99999 --word-diff > file.txt

你将拥有的是:     从您的iPhone或Android手机中找到[ - %(PRODUCT:MESSAGE_PLURAL)s - ] {+ tweets +},或者写下自己的[-tweet - ] {+%(PRODUCT:MESSAGE)s +}!

我不是真正的开发人员,但如果我是,我想我能编写一个标识[-*-]{+*+}实例的正则表达式,删除这些字符并交替保存或基于$(*)的存在删除了内容,这似乎是产品化中的一个共同元素。

如果有大量文件,这可能会很麻烦,因为它需要将> file.txt输出映射到相关文件的额外步骤。

可能的解决方案:git ls-files -u | git diff branch1..branch2 -U99999 --word-diff > ./intermediate/filename

该代码是错误的,但您应该能够编写一个bash脚本来获取所有未合并的文件,将每个文件的diff与整个文件的上下文保存到具有原始文件名的中间文件。

其他选择:

您可以照常合并分支,但是根据上面的逻辑编写脚本来解决合并冲突,虽然增加了多行的复杂性,解析<<<<<<< ,=======,>>>>>等等。

比我更有经验的人也可以使用git-filter-branch