Git mergetool genera file .orig indesiderati


486

Quando eseguo una risoluzione dei conflitti di unione con Kdiff3 (e altri strumenti di unione che ho provato) ho notato che in risoluzione *.origviene creato un file. C'è un modo per non creare quel file extra?

Risposte:


771

Una possibile soluzione da git config:

git config --global mergetool.keepBackup false

Dopo aver eseguito un'unione, il file originale con marcatori di conflitto può essere salvato come file con .origestensione.
Se questa variabile è impostata su, falsequesto file non viene conservato.
L'impostazione predefinita è true(ad es. Conservare i file di backup).

L'alternativa è non aggiungere o ignorare quei file, come suggerito in questo articolo di gitguru ,

git mergetoolsalva la versione del conflitto di unione del file con un .origsuffisso “ ”.
Assicurati di eliminarlo prima di aggiungere e confermare l'unione o aggiungere *.origal tuo .gitignore.

Berik suggerisce nei commenti di usare:

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

Charles Bailey consiglia nella sua risposta di essere consapevole delle impostazioni interne dello strumento diff che potrebbero anche generare quei file di backup, indipendentemente dalle impostazioni git.

  • kdiff3 ha le sue impostazioni (vedi " Unisci directory " nel suo manuale).
  • altri strumenti come WinMerge possono avere la propria estensione di file di backup (WinMerge:, .bakcome menzionato nel suo manuale ).

Quindi è necessario ripristinare anche quelle impostazioni.


7
@Sophistifunk: buon punto. Ho modificato la risposta per utilizzare il segno corretto.
VonC,

10
Modificare le impostazioni in kdiff stesso ha funzionato per me: Impostazioni> Configura Kdiff3> Directory. Deseleziona la casella "File di backup (.orig)"
kmgdev

2
git config --global mergetool.keepBackup false, Risolto per P4Merge su Mavericks 10.9.2. Grazie :)
kpsfoo

1
@Sandro Grazie. Ho ripristinato il collegamento.
VonC,

5
Nota che se stai modificando manualmente il tuo .gitconfig, vuoi lo strumento di unione visiva keepBackup = falseunder [mergetool], not under [mergetool "BeyondCompare4"]o qualunque che tu abbia configurato.
TrueWill,

85

Devi fare un po 'di attenzione nell'usare kdiff3as mentre git mergetoolpuò essere configurato per salvare un .origfile durante l'unione, il comportamento predefinito per kdiff3è anche quello di salvare un .origfile di backup indipendentemente da git mergetool.

Devi assicurarti che il mergetoolbackup sia spento:

git config --global mergetool.keepBackup false

e anche che le impostazioni di kdiff3 sono impostate per non creare un backup:

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

4
Configure/Options => Directory Merge => Backup Files (*.orig)aiutò davvero a sbarazzarmi di tutto lo strano protocollo io-slave, klauncher «» sconosciuto, e non riuscì a creare errori .orig. grazie
Geremia,

2
Perché git config --global mergetool.keepBackup falsedeve essere impostato?
Geremia,

1
lasciami aggiustare la tua prima riga "Devi essere un po 'pazzo per usare kdiff3" - lì :-)
Tim Jarvis

@TimJarvis Uso sempre kdiff3 e mi piace. Mi chiedo se c'è un motivo per chiamarlo "un po 'pazzo per usare kdiff3" o se questo è solo uno scherzo (vedo la faccina sorridente, non mi offenderò in alcun modo, lo chiedo seriamente)
Quinn Wilson

35

Per essere chiari, il comando git corretto è:

git config --global mergetool.keepBackup false

Entrambe le altre risposte hanno errori di battitura nella riga di comando che causeranno il fallimento o il malfunzionamento.


32

L'opzione per salvare il file .orig può essere disabilitata configurando KDiff3

KDiff3 File di backup Opzione .orig


2
Questa dovrebbe essere la vera soluzione.
Gondy,

Per me va bene. Grazie mille @ richard-pierre
Andrew

Avevo già configurato correttamente git config globale ma avevo ancora quei file .orig su rebase / merge ecc. Le impostazioni di Kdiff3 alla fine hanno fatto il trucco.
Cécile Fecherolle,

25

Lo uso per ripulire tutti i file che terminano con ".orig":

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

Se sei uno scaredy-cat :) potresti lasciare l'ultima parte solo per elencarli (o lasciar perdere -rse vuoi approvare ogni cancellazione):

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

1
Totalmente utile se si desidera ancora i backup fino a quando non si è pronti per il commit.
Kelly,

5
È inoltre possibile aggiungere * .orig in .gitignore al livello principale se si mantengono uniti i backup.
Ville,

11

Uso semplicemente il comando

git clean -n *.orig

controlla per assicurarti che siano elencati solo i file che voglio rimuovere

git clean -f *.orig

1
Un buon consiglio! Sarebbe utile se aggiungessi anche le altre risposte relative alle impostazioni di gitconfig (da altre risposte).
AzP,

10

Oltre alle risposte corrette offerte come soluzioni a lungo termine, puoi usare git per rimuovere tutti i file non necessari una volta per te con il git clean -fcomando ma usa git clean --dry-runprima per assicurarti che non accada nulla di indesiderato.

Questo ha il vantaggio di utilizzare la funzionalità testata integrata di Git su script specifici per il tuo sistema operativo / shell per rimuovere i file.


4
Sì, ma fai molta attenzione poiché questo comando fa molto di più che rimuovere i file .orig.
kghastie,

4

O semplicemente aggiungi

* .orig

al tuo gitignore globale


3
git config --global mergetool.keepBackup false

Questo dovrebbe funzionare anche per Beyond Compare (come mergetool)


0

Finestre:

  1. nel Win/Users/HOME/.gitconfigset di filemergetool.keepTemporaries=false
  2. in File git/libexec/git-core/git-mergetool, nella funzione cleanup_temp_files()aggiungi rm -rf -- "$MERGED.orig"all'interno del blocco else.

1
Vedi la risposta accettata Questo modifica gli strumenti di base e non è scalabile.
Oligofren,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.