web-dev-qa-db-fra.com

Git mergetool génère des fichiers .orig non souhaités

Quand je fais une résolution de conflit de fusion avec Kdiff3 (et un autre outil de fusion que j'ai essayé), j'ai remarqué que lors de la résolution un fichier *.orig est créé. Y a-t-il un moyen pour qu'il ne crée pas ce fichier supplémentaire?

434
Akeem

Une solution possible de git config :

_git config --global mergetool.keepBackup false
_

Après avoir effectué une fusion, le fichier d'origine avec les marqueurs de conflit peut être enregistré en tant que fichier avec une extension _.orig_.
Si cette variable est définie sur false, alors ce fichier n'est pas conservé.
La valeur par défaut est 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 article de gitgur ,

_git mergetool_ enregistre la version du fichier contenant un conflit de fusion avec le suffixe "_.orig_".
Assurez-vous de le supprimer avant d'ajouter et de valider la fusion ou d'ajouter _*.orig_ à votre _.gitignore_.

Berik suggère dans les commentaires à utiliser:

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

Charles Bailey conseille à sa réponse d'être conscient des paramètres de l'outil de diff interne 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 tels que WinMerge peuvent avoir leur propre extension de fichier de sauvegarde (WinMerge: _.bak_, comme mentionné dans son manuel ).

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

703
VonC

Vous devez être un peu prudent avec kdiff3, car si git mergetool peut être configuré pour enregistrer un fichier .orig lors de la fusion, le comportement par défaut de kdiff3 consiste également à enregistrer un fichier. .orig fichier de sauvegarde indépendamment de git mergetool.

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

git config --global mergetool.keepBackup false

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

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

Pour être clair, la commande correcte de git est la suivante:

git config --global mergetool.keepBackup false

Les deux autres réponses ont des fautes de frappe dans la ligne de commande qui provoqueront un échec ou un dysfonctionnement.

32
John

L’option d’enregistrer le fichier .orig peut être désactivée en configurant KDiff3.

KDiff3 Backup file .orig option

30
Richard J

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 désactivée pour la liste (ou laisser le -r si vous souhaitez approuver chaque suppression):

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

Outre les réponses correctes proposées en tant que solutions à long terme, vous pouvez utiliser git pour supprimer tous les fichiers inutiles une fois pour vous avec la commande git clean -f, mais utilisez git clean --dry-run en premier pour vous assurer que rien ne se produira par inadvertance.

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

10
haleonj

J'utilise simplement la commande

git clean -n *.orig

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

git clean -f *.orig
10
Rodneyk
git config --global mergetool.keepBackup false

Cela devrait aussi fonctionner pour Beyond Compare (en tant que mergetool)

3
Atul

Ou simplement ajouter

* .orig

à votre gitignore global

3
cd491415

Les fenêtres:

  1. dans le fichier Win/Users/HOME/.gitconfig set mergetool.keepTemporaries=false
  2. dans le fichier git/libexec/git-core/git-mergetool, dans la fonction cleanup_temp_files(), ajoutez rm -rf -- "$MERGED.orig" dans le bloc else.
0
michal