配置Git为合并冲突创建多个文件

时间:2017-11-27 13:41:01

标签: git

我只是尝试合并我的一个分支,但不幸的是,存在合并冲突,因为我的分支和主服务器都添加了一个具有相同名称的文件。因此,在发送合并命令后,我得到:

from toolz import *

merge_with(
    tuple, 
    my_dict, 
    reduce(
        lambda acc, x: update_in(acc, x, identity, 0),
        my_dict.keys(), 
        Counter(my_list)))

我的问题是git会改变文件以创建一个统一的差异,而不是创建单独的文件来工作,我习惯使用SVN。例如。我会得到三个新版本的文件,其扩展名为... Auto-merging Defines.php CONFLICT (add/add): Merge conflict in Defines.php Automatic merge failed; fix conflicts and then commit the result. .working.merge-right

问题

当遇到合并冲突时,是否可以将Git配置为创建多个文件而不是创建统一差异?这样我可以使用像meld这样的工具来查看并排差异。或者,是否可以使用类似于.merge-leftgit checkout --ours [filename]的命令手动执行此操作,但是将其写入新文件而不是原始文件?

1 个答案:

答案 0 :(得分:1)

我有时会手动完成此操作。正如你所指出的那样,这是一种痛苦,因为将文件检查到备用路径并不是那么简单。您当然可以查看基本版本,然后重命名,然后查看"他们的"版本,然后重命名,然后检查"我们的"版本,然后重命名它。由于这是脚本化的,因此额外的步骤 。或者你可以从管道命令中拼凑出一些东西,虽然我不得不认为一个通过,但当上述工作正常时它看起来并不值得。

如果你想配置git来独立完成这个,你可能需要编写一个自定义合并驱动程序。合并驱动程序可以访问文件的三个版本,因此将它们放在工作树中的适当路径上会很容易。请参阅"定义自定义合并驱动程序"在gitattributes文档(https://git-scm.com/docs/gitattributes)中。除了必须在大多数方面制定委托定期合并策略的细节之外,不利的一面是,一旦运行,您就拥有.working.merge-left和{{ 1}}要从工作树中清除的文件。 (当然它不应该是一个问题,但是有可能与实际文件的名称冲突。)