Git mergetool生成不需要的.orig文件


486

当我使用Kdiff3(和我尝试过的其他合并工具)进行合并冲突解决时,我注意到在解决问题时*.orig会创建一个文件。有没有办法不创建该额外文件?

Answers:


770

来自git config以下方面的可能解决方案:

git config --global mergetool.keepBackup false

执行合并后,带有冲突标记的原始文件可以另存为带有.orig扩展名的文件。
如果将此变量设置为,false则不会保留该文件。
默认为true(即保留备份文件)。

替代方法是不添加或忽略这些文件,如gitguru文章中所建议,

git mergetool使用.orig后缀“ ” 保存文件的合并冲突版本。
在添加并提交合并或添加*.orig到之前,请确保将其删除.gitignore

Berik 在评论中建议使用:

find . -name \*.orig 
find . -name \*.orig -delete

Charles Bailey他的回答中建议注意内部差异工具设置,无论git设置是什么,它们也可能生成那些备份文件。

  • kdiff3具有自己的设置(请参见其手册中的“ 目录合并 ”)。
  • 喜欢的WinMerge其他工具可以有自己的备份文件的扩展名(的WinMerge:.bak作为中提到它的手册)。

因此,您还需要重置这些设置。


7
@Sophistifunk:好点。我已经编辑了答案以使用正确的符号。
VonC 2010年

10
编辑kdiff本身的设置对我有用:设置>配置Kdiff3>目录。取消选中该复选框标有“备份文件(那些.orig)”
kmgdev

2
git config --global mergetool.keepBackup false,在Mavericks 10.9.2上解决了P4Merge。谢谢:)
kpsfoo 2014年

1
@Sander谢谢。我已经恢复了链接。
VonC

5
请注意,如果您要手动编辑.gitconfig,则需要使用keepBackup = falseunder [mergetool],而不是under [mergetool "BeyondCompare4"]或任何已配置的可视合并工具。
TrueWill

85

您必须谨慎使用,kdiff3因为git mergetool可以.orig在合并期间配置为保存文件,而默认行为kdiff3是也.orig独立于保存备份文件git mergetool

您必须确保mergetool备份已关闭:

git config --global mergetool.keepBackup false

并且将kdiff3的设置设置为不创建备份:

Configure/Options => Directory Merge => Backup Files (*.orig)

4
Configure/Options => Directory Merge => Backup Files (*.orig)确实帮助摆脱了所有奇怪的io-slave,klauncher«»未知协议,并且无法创建.orig错误。谢谢
Geremia

2
为什么git config --global mergetool.keepBackup false必须设置?
Geremia

1
让我修复您的第一行“使用kdiff3,您必须有点疯狂”-那里:-)
Tim Jarvis

@TimJarvis我一直使用kdiff3,我喜欢它。我想知道是否有理由称其为“使用kdiff3有点疯狂”还是开个玩笑(我看到笑脸,我不会冒犯任何人,我很认真地问)
奎因·威尔逊

35

要清楚,正确的git命令是:

git config --global mergetool.keepBackup false

其他两个答案在命令行中都有错别字,这将导致它失败或无法正常工作。


32

可以通过配置KDiff3禁用保存.orig文件的选项

KDiff3备份文件.orig选项


2
这应该是真正的解决方案。
刚迪2015年

为我工作。非常感谢@ richard-pierre
Andrew

我已经正确设置了全局git config,但是在rebase / merge等上仍然有那些.orig文件。Kdiff3设置终于成功了。
塞西尔Fecherolle

25

我用它来清理所有以“ .orig”结尾的文件:

function git-clean-orig {
    git status -su | grep -e"\.orig$" | cut -f2 -d" " | xargs rm -r
}

如果您是一只吓人的猫:),可以将最后一部分保留为仅列出它们(-r如果要批准每个删除,则可以省略):

function git-show-orig {
    git status -su | grep -e"\.orig$" | cut -f2 -d" "
}

1
如果在准备提交之前仍要备份,则完全有用。
凯利

5
如果您继续合并备份,也可以在.gitignore的顶级添加* .orig。
Ville

11

我只是使用命令

git clean -n *.orig

检查以确保仅列出我要删除的文件,然后

git clean -f *.orig

1
一个很好的提示!如果您还添加了有关gitconfig设置的其他答案(来自其他答案),那将是很好的。
AzP

10

除了作为长期解决方案提供的正确答案外,您还可以使用git使用该git clean -f命令一次删除所有不必要的文件,但git clean --dry-run首先使用git 来确保不会发生任何意外的情况。

这样做的好处是可以使用Git的经过测试的内置功能,而不是针对您的OS / shell的脚本来删除文件。


4
是的,但是要非常小心,因为此命令除了删除.orig文件外,还需要执行更多操作。
kghastie


3
git config --global mergetool.keepBackup false

这也应该适用于超越比较(作为mergetool)


0

视窗:

  1. 在文件Win/Users/HOME/.gitconfig集中mergetool.keepTemporaries=false
  2. 在File中git/libexec/git-core/git-mergetool,在函数中的else块中cleanup_temp_files()添加rm -rf -- "$MERGED.orig"

1
请参阅已接受的答案。这会修改核心工具,并且无法扩展。
oligofren
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.