Git mergetool generates unwanted .orig files
Asked Answered
D

11

587

When I do a merge conflict resolution with Kdiff3 (and other merge tool I tried) I noticed that on resolution a *.orig file is created. Is there a way for it to not create that extra file?

Danell answered 9/8, 2009 at 16:25 Comment(1)
Finally I googled this damn thing. Thank you for asking this question πŸ† – Fiasco
P
920

A possible solution from git config:

git config --global mergetool.keepBackup false

After performing a merge, the original file with conflict markers can be saved as a file with a .orig extension.
If this variable is set to false then this file is not preserved.
Defaults to true (i.e. keep the backup files).

The alternative being not adding or ignoring those files, as suggested in this gitguru article,

git mergetool saves the merge-conflict version of the file with a β€œ.orig” suffix.
Make sure to delete it before adding and committing the merge or add *.orig to your .gitignore.

Berik suggests in the comments to use:

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

Charles Bailey advises in his answer to be aware of internal diff tool settings which could also generate those backup files, no matter what git settings are.

  • kdiff3 has its own settings (see "Directory merge" in its manual).
  • other tools like WinMerge can have their own backup file extension (WinMerge: .bak, as mentioned in its manual).

So you need to reset those settings as well.

Photochemistry answered 9/8, 2009 at 16:34 Comment(12)
Editing the settings in kdiff itself worked for me: Settings > Configure Kdiff3 > Directory. Uncheck the box labeled "Backup files (.orig)" – Stoker
git config --global mergetool.keepBackup false, Solved for P4Merge on Mavericks 10.9.2. Thanks :) – Interlocutor
found a set of .gitignore for opendiff generated files in here. may be useful for someone ;) – Alliteration
@Alliteration Interesting. That should be added or referenced in github.com/github/gitignore or gitignore.io – Photochemistry
just want to note that this works for me using 'meld' as well. – Trueblue
Note that if you're manually editing your .gitconfig, you want the keepBackup = false under [mergetool], not under [mergetool "BeyondCompare4"] or whatever visual merge tool you have configured. – Loria
git config --global mergetool.keepBackup false, solved for DiffMerge the problem too! Many thanks! It was so useful – Mulkey
You may want to use find . -name \*.orig to find these files and find . -name \*.orig -delete to delete them – Wear
I have been using git clean -f to remove unwanted .orig files. This may be a simpler move, but is probably an indicator of how little I know about git. – Sadducee
rm ./**/*.orig is a shorter alternative to the find command. – Nunes
@BenjaminHammerNørgaard True. But I always prefer to find (list files) first, check that what I am about to delete is indeed what I want, then delete it. Using rm with wildcards (* or **) is anxiety-inducing for me ;) – Photochemistry
@Photochemistry but if you are in a git repo it's not that hard to undo a mistake. Just don't forget the .. Wouldn't be too good to do rm /**/*.orig. – Nunes
I
95

You have to be a little careful with using kdiff3 as while git mergetool can be configured to save a .orig file during merging, the default behaviour for kdiff3 is to also save a .orig backup file independently of git mergetool.

You have to make sure that mergetool backup is off:

git config --global mergetool.keepBackup false

and also that kdiff3's settings are set to not create a backup:

Configure/Options => Directory Merge => Backup Files (*.orig)
Inclinometer answered 9/8, 2009 at 18:3 Comment(5)
Configure/Options => Directory Merge => Backup Files (*.orig) really helped get rid of all the strange io-slave, klauncher «» unknown protocol, and couldn't create .orig errors. thank you – Glenn
Why does git config --global mergetool.keepBackup false have to be set? – Glenn
let me fix your first line "You have to be a little crazy to use kdiff3" - there :-) – Bandler
@TimJarvis I use kdiff3 all the time and I like it. I wonder if there is a reason for calling it "a little crazy to use kdiff3" or if that is just joking (I see the smiley face, I won't be offended either way, I'm earnestly asking) – Defamation
@QuinnWilson It was mostly just a joke - there are many better tools than kdiff3 though, if you like it you will probably absolutely love tools like p4Merge etc. – Bandler
E
42

The option to save the .orig file can be disabled by configuring KDiff3

KDiff3 Backup file .orig option

Eruct answered 6/10, 2014 at 14:41 Comment(3)
This should be the real solution. – Tuscany
Works for me. Thank you so much @richard-pierre – Swabber
I already had the global git config set properly but still had those .orig files on rebase/merge etc. The Kdiff3 settings finally did the trick. – Swellfish
S
40

To be clear, the correct git command is:

git config --global mergetool.keepBackup false

Both of the other answers have typos in the command line that will cause it to fail or not work correctly.

Steiger answered 26/10, 2009 at 21:55 Comment(0)
R
25

I use this to clean up all files ending in ".orig":

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

If you are a scaredy-cat :) you could leave the last part off just to list them (or leave off the -r if you want to approve each delete):

function git-show-orig {
    git status -su | grep -e"\.orig$" | cut -f2 -d" "
}
Rhineland answered 24/5, 2012 at 20:5 Comment(2)
Totally useful if you still want the backups until you get ready to commit. – Moir
You could also add *.orig in .gitignore on the top level if you keep merge backups around. – Overscrupulous
T
22

I simply use the command

git clean -n *.orig

check to make sure only file I want remove are listed then

git clean -f *.orig
Trundle answered 30/8, 2017 at 14:8 Comment(1)
A good tip! It would be good if you also added the other answers regarding gitconfig settings (from other answers). – Pekin
N
9

Besides the correct answers offered as long term solutions, you can use git to remove all unnecessary files once for you with the git clean -f command but use git clean --dry-run first to ensure nothing unintended would happen.

This has the benefit of using tested built in functionality of Git over scripts specific to your OS/shell to remove the files.

Numeration answered 8/10, 2013 at 16:22 Comment(1)
Yes, but be very careful as this command does a lot more than remove the .orig files. – Rhineland
O
8

Or just add

*.orig

to your global gitignore

Oiler answered 10/7, 2018 at 16:14 Comment(1)
Not a huge fan because it still leaves garbage in your local repository. – Derwin
B
3
git config --global mergetool.keepBackup false

This should work for Beyond Compare (as mergetool) too

Boatbill answered 4/11, 2014 at 22:39 Comment(0)
D
2

If you're working on a Windows machine - you can turn off backups with this command

git config --global mergetool.keepBackup false

If you don't want to do that, you can easily delete all the .orig files using this powershell command

ls -Recurse C:\path\to\repository\*.orig | rm
Derwin answered 12/3, 2021 at 23:15 Comment(0)
S
0

Windows:

  1. in File Win/Users/HOME/.gitconfig set mergetool.keepTemporaries=false
  2. in File git/libexec/git-core/git-mergetool, in the function cleanup_temp_files() add rm -rf -- "$MERGED.orig" within the else block.
Seigneur answered 24/7, 2015 at 11:5 Comment(1)
See the accepted answer. This modifies core tools and is not scalable. – Yak

© 2022 - 2024 β€” McMap. All rights reserved.