2

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

但是,在这种情况下,有问题的行是一个英文句子,并且变化是产品化。一个例子:

合并基础:

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

分支 1:

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

分支 2:

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

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

4

1 回答 1

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+}你自己!

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

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

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

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

其他选项:

您可以像往常一样合并分支,但是根据上面的逻辑编写一个脚本来为您解决合并冲突,尽管增加了多行的复杂性,解析 <<<<<<, =======, >>>>>等

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

于 2012-10-09T19:07:30.887 回答