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

Ake*_*eem 454 git version-control

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

Von*_*onC 729

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

git config --global mergetool.keepBackup false
Run Code Online (Sandbox Code Playgroud)

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

另一种方法是不添加或忽略这些文件,如本gitguru文章所述,

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

Berik建议在评论中使用:

find . -name \*.orig 
find . -name \*.orig -delete
Run Code Online (Sandbox Code Playgroud)

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

  • kdiff3有自己的设置(参见手册中的" 目录合并 ").
  • 其他工具如WinMerge可以拥有自己的备份文件扩展名(WinMerge : .bak, 如其手册中所述).

所以你也需要重置这些设置.

  • 编辑kdiff中的设置本身对我有用:设置>配置Kdiff3>目录.取消选中标记为"备份文件(.orig)"的复选框 (9认同)
  • @Sophistifunk:好点.我编辑了答案以使用正确的符号. (7认同)
  • 请注意,如果您手动编辑.gitconfig,则需要`[mergetool]`下的`keepBackup = false`,而不是`[mergetool"BeyondCompare4"]`或您配置的任何可视化合并工具. (5认同)
  • git config --global mergetool.keepBackup false,为Mavericks 10.9.2上的P4Merge解决。谢谢 :) (2认同)

CB *_*ley 81

使用时必须要小心,kdiff3因为git mergetool可以将其配置为.orig在合并期间保存文件,默认行为kdiff3.orig独立保存备份文件git mergetool.

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

git config --global mergetool.keepBackup false
Run Code Online (Sandbox Code Playgroud)

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

Configure/Options => Directory Merge => Backup Files (*.orig)
Run Code Online (Sandbox Code Playgroud)

  • `Configure/Options => Directory Merge => Backup Files(*.orig)`真的帮助摆脱了所有奇怪的io-slave,klauncher«»未知协议,并且无法创建.orig错误.谢谢 (3认同)
  • 为什么必须设置`git config --global mergetool.keepBackup false`? (2认同)

Joh*_*ohn 33

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

git config --global mergetool.keepBackup false
Run Code Online (Sandbox Code Playgroud)

其他两个答案在命令行中都有拼写错误,导致它失败或无法正常工作.


xx1*_*1xx 31

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

KDiff3备份文件.orig选项

  • 这应该是真正的解决方案. (2认同)

kgh*_*tie 25

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

function git-clean-orig {
    git status -su | grep -e"\.orig$" | cut -f2 -d" " | xargs rm -r
}
Run Code Online (Sandbox Code Playgroud)

如果你是一个scaredy-cat :)你可以将最后一部分留下来列出它们(或者-r如果你想批准每次删除,请不要这样做):

function git-show-orig {
    git status -su | grep -e"\.orig$" | cut -f2 -d" "
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你保持合并备份,你也可以在.gitignore中添加*.orig. (4认同)

小智 11

我只是使用命令

git clean -n *.orig
Run Code Online (Sandbox Code Playgroud)

检查以确保只列出我要删除的文件

git clean -f *.orig
Run Code Online (Sandbox Code Playgroud)

  • 一个好提示!如果您还添加了有关 gitconfig 设置的其他答案(来自其他答案),那就太好了。 (2认同)

hal*_*onj 10

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

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

  • 是的,但要非常小心,因为此命令除了删除.orig文件之外还有很多功能. (4认同)

cd4*_*415 5

或者只是添加

*.orig

到您的全球 gitignore

  • 不是一个超级粉丝,因为它仍然在您的本地存储库中留下垃圾。 (4认同)