Git mergetool génère des fichiers .orig indésirables

486

Lorsque je fais une résolution de conflit de fusion avec Kdiff3 (et un autre outil de fusion que j'ai essayé), j'ai remarqué qu'à la résolution, un *.origfichier est créé. Existe-t-il un moyen de ne pas créer ce fichier supplémentaire?

Akeem
la source

Réponses:

771

Une solution possible à partir de git config:

git config --global mergetool.keepBackup false

Après avoir effectué une fusion, le fichier d'origine avec des marqueurs de conflit peut être enregistré en tant que fichier avec une .origextension.
Si cette variable est définie sur, falsece fichier n'est pas conservé.
Par défaut true(c'est- à -dire conserver les fichiers de sauvegarde).

L'alternative étant de ne pas ajouter ou ignorer ces fichiers, comme suggéré dans cet article de gitguru ,

git mergetoolenregistre la version en conflit de fusion du fichier avec le .origsuffixe « ».
Assurez-vous de le supprimer avant d'ajouter et de valider la fusion ou de l'ajouter *.origà votre .gitignore.

Berik suggère dans les commentaires d'utiliser:

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

Charles Bailey conseille dans sa réponse d'être conscient des paramètres internes des outils de diff qui pourraient également générer ces fichiers de sauvegarde, quels que soient les paramètres git.

  • kdiff3 a ses propres paramètres (voir " Fusion de répertoire " dans son manuel).
  • d'autres outils comme WinMerge peuvent avoir leur propre extension de fichier de sauvegarde (WinMerge:, .bakcomme mentionné dans son manuel ).

Vous devez donc également réinitialiser ces paramètres.

VonC
la source
7
@Sophistifunk: bon point. J'ai modifié la réponse pour utiliser le signe approprié.
VonC
10
La modification des paramètres dans kdiff lui-même a fonctionné pour moi: Paramètres> Configurer Kdiff3> Répertoire. Décochez la case intitulée "Fichiers de sauvegarde (.orig)"
kmgdev
2
git config --global mergetool.keepBackup false, Résolu pour P4Merge sur Mavericks 10.9.2. Merci :)
kpsfoo
1
@Sander Merci. J'ai rétabli le lien.
VonC
5
Notez que si vous modifiez manuellement votre .gitconfig, vous voulez le keepBackup = falsesous [mergetool], pas sous [mergetool "BeyondCompare4"]ou quel que soit l'outil de fusion visuel que vous avez configuré.
TrueWill
85

Vous devez être un peu prudent avec l'utilisation kdiff3car tant que vous git mergetoolpouvez être configuré pour enregistrer un .origfichier pendant la fusion, le comportement par défaut de kdiff3est également d'enregistrer un .origfichier de sauvegarde indépendamment de git mergetool.

Vous devez vous assurer que la mergetoolsauvegarde est désactivée:

git config --global mergetool.keepBackup false

et aussi que les paramètres de kdiff3 sont définis pour ne pas créer de sauvegarde:

Configure/Options => Directory Merge => Backup Files (*.orig)
CB Bailey
la source
4
Configure/Options => Directory Merge => Backup Files (*.orig)vraiment aidé à se débarrasser de tous les étranges io-esclaves, klauncher «» protocole inconnu, et n'a pas pu créer d'erreurs .orig. merci
Geremia
2
Pourquoi faut git config --global mergetool.keepBackup false-il régler?
Geremia
1
permettez-moi de corriger votre première ligne "Vous devez être un peu fou pour utiliser kdiff3" - là :-)
Tim Jarvis
@TimJarvis J'utilise kdiff3 tout le temps et j'aime ça. Je me demande s'il y a une raison de l'appeler "un peu fou pour utiliser kdiff3" ou si c'est juste une blague (je vois le visage souriant, je ne serai pas offensé de toute façon, je le demande sincèrement)
Quinn Wilson
35

Pour être clair, la commande git correcte est:

git config --global mergetool.keepBackup false

Les deux autres réponses ont des fautes de frappe dans la ligne de commande qui entraîneront l'échec ou ne fonctionneront pas correctement.

John
la source
32

L'option d'enregistrement du fichier .orig peut être désactivée en configurant KDiff3

Option .orig du fichier de sauvegarde KDiff3

xx1xx
la source
2
Cela devrait être la vraie solution.
Gondy
Travaille pour moi. Merci beaucoup @ richard-pierre
Andrew
J'avais déjà la configuration globale de git correctement, mais j'avais toujours ces fichiers .orig sur rebase / merge etc. Les paramètres de Kdiff3 ont finalement fait l'affaire.
Cécile Fecherolle
25

J'utilise ceci pour nettoyer tous les fichiers se terminant par ".orig":

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

Si vous êtes un chat effrayé :) vous pouvez laisser la dernière partie juste pour les lister (ou laisser la -rsi vous voulez approuver chaque suppression):

function git-show-orig {
    git status -su | grep -e"\.orig$" | cut -f2 -d" "
}
kghastie
la source
1
Totalement utile si vous souhaitez toujours les sauvegardes jusqu'à ce que vous soyez prêt à valider.
Kelly
5
Vous pouvez également ajouter * .orig dans .gitignore au niveau supérieur si vous conservez des sauvegardes de fusion.
Ville
11

J'utilise simplement la commande

git clean -n *.orig

vérifiez que seul le fichier que je souhaite supprimer est répertorié, puis

git clean -f *.orig
Rodneyk
la source
1
Un bon conseil! Ce serait bien si vous ajoutiez également les autres réponses concernant les paramètres de gitconfig (à partir d'autres réponses).
AzP
10

Outre les bonnes réponses proposées comme solutions à long terme, vous pouvez utiliser git pour supprimer tous les fichiers inutiles une fois pour vous avec la git clean -fcommande, mais utilisez d' git clean --dry-runabord pour vous assurer que rien ne se produirait.

Cela a l'avantage d'utiliser les fonctionnalités intégrées testées de Git sur des scripts spécifiques à votre système d'exploitation / shell pour supprimer les fichiers.

haleonj
la source
4
Oui, mais soyez très prudent car cette commande fait bien plus que supprimer les fichiers .orig.
kghastie
4

Ou ajoutez simplement

* .orig

à votre gitignore mondial

cd491415
la source
3
git config --global mergetool.keepBackup false

Cela devrait également fonctionner pour Beyond Compare (comme mergetool)

Atul
la source
0

Les fenêtres:

  1. dans l' Win/Users/HOME/.gitconfigensemble de fichiersmergetool.keepTemporaries=false
  2. dans File git/libexec/git-core/git-mergetool, dans la fonction cleanup_temp_files()add rm -rf -- "$MERGED.orig"dans le bloc else.
michal
la source
1
Voir la réponse acceptée. Cela modifie les outils de base et n'est pas évolutif.
oligofren