Documentation未说明默认情况下创建.orig
文件的原因。此外,它们在下一次合并后的内容未定义。但是,默认情况下必须创建它们。
我最好的猜测是,当存在现有的.orig
文件时(而不是重复合并),纠正失败的合并很常见并且也更容易,但显然大多数用户不知道如何处理它们。
答案 0 :(得分:1)
默认情况下,它们不是创建,而是默认情况下它们被遗忘。在运行您选择作为合并工具的命令之前,git mergetool
命令始终将冲突标记化文件复制到.orig
。
git mergetool
命令创建它们的真正原因是它可以将所谓合并文件上的日期戳与.orig
文件上的日期戳进行比较最近创建。
假设git mergetool
运行的命令,据说合并了三个基本本地(HEAD
/ --ours
)和远程(--theirs
)文件,实际上什么也没做一点都不例如,假设您选择了命令true
,这是一个简单成功的无操作。在这种情况下,命令未写入的“合并”文件具有{em>相同的时间戳,当git mergetool
成功时。同时,.orig
文件也具有与git mergetool
创建时相同的时间戳。这向git mergetool
表明您选择的合并工具实际上失败了,并且文件实际上并未实际合并。但是,如果所谓的合并文件比 .orig
文件更新,那么您选择的命令必须已写入文件,因此它现在可能以您想要的方式合并。 / p>
(git mergetool
命令有一个单独的配置旋钮,“信任退出代码”,也旨在用于同一目的:尝试确定该工具是否实际合并了它使用这两个技巧来决定是否运行git add
。对于git mergetool
知道的合并工具,它有一个内置的“信任退出代码”设置。显然,{{1命令是一个糟糕的合并工具,并没有内置。)
如果我们将问题修改为:为什么true
默认会遗漏git mergetool
文件?那么我们必须问.orig
的作者为什么他们选择默认。只有他们真的知道。我们可以推测:也许是因为git mergetool
,如果合并仍在继续,它可以重新创建冲突,当时不作为命令存在。也许是因为他们认为这是更方便的默认值:git checkout -m
比运行rm *.orig
更容易。但事实是,我确实不确定。
答案 1 :(得分:0)
如果我没错,那么当文件发生冲突时,为了能够看到发生的事情,只需查看文件中的文件即可您尝试合并的分支在某些情况下是不够的,因此orig文件就是分支发散点的文件(这样您就可以看到所涉及的两个分支的差异)。
答案 2 :(得分:0)
它们是来自不成功合并的备份文件。扩展程序来自程序patch;查找" .orig"在手册中。