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?

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.


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)

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.


32

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

Opcja .orig pliku kopii zapasowej KDiff3


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" "
}

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

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.


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


3
git config --global mergetool.keepBackup false

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


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.

1
Zobacz zaakceptowaną odpowiedź. To modyfikuje podstawowe narzędzia i nie jest skalowalne.
— oligofren,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.