Git Mergetool generiert unerwünschte .orig-Dateien

486

Beim Durchführen einer Zusammenführungskonfliktlösung mit Kdiff3 (und einem anderen Zusammenführungswerkzeug, das ich ausprobiert habe) habe ich festgestellt, dass bei der Auflösung eine *.origDatei erstellt wird. Gibt es eine Möglichkeit, diese zusätzliche Datei nicht zu erstellen?

Akeem
quelle

Antworten:

771

Eine mögliche Lösung von git config:

git config --global mergetool.keepBackup false

Nach dem Zusammenführen kann die Originaldatei mit Konfliktmarkierungen als Datei mit einer .origErweiterung gespeichert werden .
Wenn diese Variable auf gesetzt falseist, bleibt diese Datei nicht erhalten.
Der Standardwert ist true(dh die Sicherungsdateien behalten).

Die Alternative besteht darin, diese Dateien nicht hinzuzufügen oder zu ignorieren, wie in diesem Gitguru-Artikel vorgeschlagen .

git mergetoolSpeichert die Merge-Konflikt-Version der Datei mit dem .origSuffix " ".
Stellen Sie sicher, dass Sie es löschen, bevor Sie die Zusammenführung hinzufügen und festschreiben oder *.origzu Ihrer hinzufügen .gitignore.

Berik schlägt in den Kommentaren vor , Folgendes zu verwenden:

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

Charles Bailey rät in seiner Antwort , die internen Einstellungen des Diff-Tools zu kennen, die auch diese Sicherungsdateien generieren können, unabhängig von den Git-Einstellungen.

Sie müssen also auch diese Einstellungen zurücksetzen.

VonC
quelle
7
@Sophistifunk: guter Punkt. Ich habe die Antwort bearbeitet, um das richtige Zeichen zu verwenden.
VonC
10
Das Bearbeiten der Einstellungen in kdiff selbst hat bei mir funktioniert: Einstellungen> Kdiff3 konfigurieren> Verzeichnis. Deaktivieren Sie das Kontrollkästchen "Sicherungsdateien (.orig)"
kmgdev
2
git config --global mergetool.keepBackup false, Gelöst für P4Merge auf Mavericks 10.9.2. Danke :)
kpsfoo
1
@ Sanders Danke. Ich habe den Link wiederhergestellt.
VonC
5
Beachten Sie, dass Sie beim manuellen Bearbeiten Ihrer .gitconfig das Tool keepBackup = falseunder [mergetool], nicht under [mergetool "BeyondCompare4"]oder das von Ihnen konfigurierte Tool zum visuellen Zusammenführen verwenden möchten .
TrueWill
85

Sie müssen ein wenig vorsichtig mit der Verwendung sein, kdiff3da while git mergetoolso konfiguriert werden kann, dass eine .origDatei während des Zusammenführens gespeichert wird. Das Standardverhalten für kdiff3besteht darin, auch eine .origSicherungsdatei unabhängig davon zu speichern git mergetool.

Sie müssen sicherstellen, dass die mergetoolSicherung deaktiviert ist:

git config --global mergetool.keepBackup false

und auch, dass die Einstellungen von kdiff3 so eingestellt sind, dass kein Backup erstellt wird:

Configure/Options => Directory Merge => Backup Files (*.orig)
CB Bailey
quelle
4
Configure/Options => Directory Merge => Backup Files (*.orig)hat wirklich geholfen, all den seltsamen io-Slave, klauncher «» unbekanntes Protokoll loszuwerden, und konnte keine .orig-Fehler erzeugen. Vielen Dank
Geremia
2
Warum muss git config --global mergetool.keepBackup falseeingestellt werden?
Geremia
1
Lassen Sie mich Ihre erste Zeile "Sie müssen ein wenig verrückt sein, um kdiff3 zu verwenden" - dort :-)
Tim Jarvis
@ TimJarvis Ich benutze kdiff3 die ganze Zeit und ich mag es. Ich frage mich, ob es einen Grund gibt, es "ein bisschen verrückt zu nennen, kdiff3 zu benutzen" oder ob das nur ein Scherz ist (ich sehe das Smiley-Gesicht, ich werde so oder so nicht beleidigt sein, frage ich ernsthaft)
Quinn Wilson
35

Um klar zu sein, lautet der richtige git-Befehl:

git config --global mergetool.keepBackup false

Beide anderen Antworten enthalten Tippfehler in der Befehlszeile, die dazu führen, dass sie fehlschlagen oder nicht richtig funktionieren.

John
quelle
32

Die Option zum Speichern der .orig-Datei kann durch Konfigurieren von KDiff3 deaktiviert werden

KDiff3 Backup-Datei .orig Option

xx1xx
quelle
2
Dies sollte die wirkliche Lösung sein.
Gondy
Funktioniert bei mir. Vielen Dank @ richard-pierre
Andrew
Ich hatte bereits die globale Git-Konfiguration richtig eingestellt, hatte aber immer noch diese .orig-Dateien beim Rebase / Merge usw. Die Kdiff3-Einstellungen haben es endlich geschafft.
Cécile Fecherolle
25

Ich verwende dies, um alle Dateien zu bereinigen, die auf ".orig" enden:

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

Wenn Sie eine Angstkatze sind :) Sie können den letzten Teil weglassen, um sie aufzulisten (oder weglassen, -rwenn Sie jeden Löschvorgang genehmigen möchten):

function git-show-orig {
    git status -su | grep -e"\.orig$" | cut -f2 -d" "
}
kghastie
quelle
1
Absolut nützlich, wenn Sie die Backups noch haben möchten, bis Sie bereit sind, ein Commit durchzuführen.
Kelly
5
Sie können auch * .orig in .gitignore auf der obersten Ebene hinzufügen, wenn Sie weiterhin Zusammenführungssicherungen durchführen.
Ville
11

Ich benutze einfach den Befehl

git clean -n *.orig

Stellen Sie sicher, dass nur die Dateien aufgelistet sind, die ich entfernen möchte

git clean -f *.orig
Rodneyk
quelle
1
Ein guter Tipp! Es wäre gut, wenn Sie auch die anderen Antworten zu den gitconfig-Einstellungen hinzufügen würden (aus anderen Antworten).
AzP
10

Neben den richtigen Antworten, die als langfristige Lösungen angeboten werden, können Sie mit git alle unnötigen Dateien einmal mit dem git clean -fBefehl entfernen, aber git clean --dry-runzuerst verwenden, um sicherzustellen, dass nichts Unbeabsichtigtes passiert.

Dies hat den Vorteil, dass die getestete integrierte Funktionalität von Git über Skripts verwendet wird, die für Ihr Betriebssystem / Ihre Shell spezifisch sind, um die Dateien zu entfernen.

Haleonj
quelle
4
Ja, aber seien Sie sehr vorsichtig, da dieser Befehl viel mehr als nur das Entfernen der .orig-Dateien bewirkt.
kghastie
4

Oder einfach hinzufügen

* .orig

zu Ihrem globalen Gitignore

cd491415
quelle
3
git config --global mergetool.keepBackup false

Dies sollte auch für Beyond Compare (als Mergetool) funktionieren

Atul
quelle
0

Windows:

  1. in Datei - Win/Users/HOME/.gitconfigSetmergetool.keepTemporaries=false
  2. in Datei git/libexec/git-core/git-mergetoolin der Funktion innerhalb des else-Blocks cleanup_temp_files()hinzufügen rm -rf -- "$MERGED.orig".
michal
quelle
1
Siehe die akzeptierte Antwort. Dies ändert die Kernwerkzeuge und ist nicht skalierbar.
Oligofren