Git scaletool generuje niechciane pliki .orig

486

Kiedy robię rozwiązywanie konfliktu scalania z Kdiff3 (i innym narzędziem scalania, którego próbowałem) zauważyłem, że po rozwiązaniu *.origplik jest tworzony. Czy istnieje sposób, aby nie utworzyć tego dodatkowego pliku?

Akeem
źródło

Odpowiedzi:

771

Możliwe rozwiązanie z git config:

git config --global mergetool.keepBackup false

Po scaleniu oryginalny plik ze znacznikami konfliktu można zapisać jako plik z .origrozszerzeniem.
Jeśli ta zmienna jest ustawiona na, falseten plik nie jest zachowywany.
Domyślnie true(tzn. Przechowuj pliki kopii zapasowej).

Alternatywą jest brak dodawania lub ignorowania tych plików, jak sugerowano w tym artykule gitguru ,

git mergetoolzapisuje wersję pliku z konfliktem scalania z .origprzyrostkiem „ ”.
Pamiętaj, aby go usunąć przed dodaniem i zatwierdzeniem scalenia lub dodaniem *.origdo swojego .gitignore.

Berik sugeruje w komentarzach, aby użyć:

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

Charles Bailey radzi w swojej odpowiedzi, aby był świadomy wewnętrznych ustawień narzędzia różnicowego, które mogą również generować pliki kopii zapasowych, bez względu na ustawienia git.

  • kdiff3 ma własne ustawienia (patrz „ Scalanie katalogów ” w podręczniku).
  • inne narzędzia, takie jak WinMerge, mogą mieć własne rozszerzenie pliku kopii zapasowej (WinMerge: .bakjak wspomniano w jego instrukcji ).

Musisz więc zresetować również te ustawienia.

VonC
źródło
7
@Sophistifunk: dobry punkt. Zredagowałem odpowiedź, aby użyć właściwego znaku.
VonC
10
Edycja ustawień w samym kdiff działała dla mnie: Ustawienia> Konfiguruj Kdiff3> Katalog. Usuń zaznaczenie pola „Kopia zapasowa plików (.orig)”
kmgdev,
2
git config --global mergetool.keepBackup false, Rozwiązany dla P4Merge w Mavericks 10.9.2. Dzięki :)
kpsfoo
1
@ Sander Dziękuję. Przywróciłem link.
VCC
5
Zauważ, że jeśli ręcznie edytujesz .gitconfig, potrzebujesz narzędzia keepBackup = falseunder [mergetool], a nie under [mergetool "BeyondCompare4"]lub innego skonfigurowanego wizualnego narzędzia do scalania.
TrueWill,
85

Musisz być ostrożny z używaniem, kdiff3ponieważ podczas gdy git mergetoolmożna skonfigurować zapisywanie .origpliku podczas scalania, domyślnym zachowaniem kdiff3jest również zapisywanie .origpliku kopii zapasowej niezależnie od git mergetool.

Musisz upewnić się, że mergetoolkopia zapasowa jest wyłączona:

git config --global mergetool.keepBackup false

a także ustawienia kdiff3 są ustawione tak, aby nie tworzyć kopii zapasowej:

Configure/Options => Directory Merge => Backup Files (*.orig)
CB Bailey
źródło
4
Configure/Options => Directory Merge => Backup Files (*.orig)naprawdę pomógł pozbyć się wszystkich dziwnych protokołów io-slave, klauncher «» i nie mógł stworzyć błędów .orig. dziękuję
Geremia
2
Dlaczego git config --global mergetool.keepBackup falsetrzeba ustawić?
Geremia
1
pozwól, że naprawię twoją pierwszą linię „Musisz być trochę szalony, aby używać kdiff3” - tam :-)
Tim Jarvis
@ TimJarvis Używam kdiff3 cały czas i podoba mi się. Zastanawiam się, czy istnieje powód, by nazywać to „trochę szalonym używaniem kdiff3”, czy może to tylko żart (widzę uśmiechniętą twarz, nie obrażę się w żaden sposób, szczerze pytam)
Quinn Wilson
35

Aby być jasnym, poprawne polecenie git to:

git config --global mergetool.keepBackup false

Obie pozostałe odpowiedzi zawierają literówki w wierszu poleceń, które spowodują, że się nie powiedzie lub nie będzie działać poprawnie.

Jan
źródło
32

Opcję zapisania pliku .orig można wyłączyć, konfigurując KDiff3

Opcja .orig pliku kopii zapasowej KDiff3

xx1xx
źródło
2
To powinno być prawdziwe rozwiązanie.
Gondy
Pracuje dla mnie. Dziękuję bardzo @ Richard-Pierre
Andrew
Miałem już poprawnie skonfigurowaną globalną konfigurację git, ale nadal miałem te pliki .orig na rebase / merge itp. Ustawienia Kdiff3 w końcu załatwiły sprawę.
Cécile Fecherolle
25

Używam tego do czyszczenia wszystkich plików z rozszerzeniem „.orig”:

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

Jeśli jesteś przestraszonym kotem :) możesz zostawić ostatnią część wyłączoną, aby ją wymienić (lub zrezygnować, -rjeśli chcesz zatwierdzić każde usunięcie):

function git-show-orig {
    git status -su | grep -e"\.orig$" | cut -f2 -d" "
}
kghastie
źródło
1
Jest to szczególnie przydatne, jeśli nadal chcesz tworzyć kopie zapasowe, dopóki nie będziesz gotowy do zatwierdzenia.
Kelly,
5
Możesz również dodać * .orig w .gitignore na najwyższym poziomie, jeśli nadal będziesz wykonywać kopie zapasowe scalania.
Ville,
11

Po prostu używam polecenia

git clean -n *.orig

sprawdź, czy na liście znajdują się tylko pliki, które chcę usunąć

git clean -f *.orig
Rodneyk
źródło
1
Dobra wskazówka! Byłoby dobrze, gdybyś dodał także inne odpowiedzi dotyczące ustawień gitconfig (z innych odpowiedzi).
AzP
10

Poza poprawnymi odpowiedziami oferowanymi jako rozwiązania długoterminowe, możesz użyć git, aby usunąć wszystkie niepotrzebne pliki raz dla ciebie za pomocą git clean -fpolecenia, ale użyj git clean --dry-runnajpierw, aby upewnić się, że nie wydarzy się nic niezamierzonego.

Ma to tę zaletę, że usuwa przetestowane wbudowane funkcje Git zamiast skryptów specyficznych dla systemu operacyjnego / powłoki.

haleonj
źródło
4
Tak, ale bądź bardzo ostrożny, ponieważ to polecenie robi znacznie więcej niż usuwanie plików .orig.
kghastie,
4

Lub po prostu dodaj

* .orig

do twojego globalnego gitignore

cd491415
źródło
3
git config --global mergetool.keepBackup false

Powinno to również działać w przypadku Beyond Compare (jako scaletool)

Atul
źródło
0

Windows:

  1. w Win/Users/HOME/.gitconfigzestawie plikówmergetool.keepTemporaries=false
  2. w pliku git/libexec/git-core/git-mergetool, w funkcji cleanup_temp_files()dodaj rm -rf -- "$MERGED.orig"w bloku else.
michal
źródło
1
Zobacz zaakceptowaną odpowiedź. To modyfikuje podstawowe narzędzia i nie jest skalowalne.
oligofren,