Git mergetool створює небажані файли .orig


486

Коли я роблю вирішення конфлікту злиття з Kdiff3 (та іншим інструментом злиття, який я спробував), я помітив, що при роздільній здатності створюється *.origфайл. Чи є спосіб, щоб він не створив додатковий файл?

Відповіді:


771

Можливе рішення git config:

git config --global mergetool.keepBackup false

Після виконання злиття вихідний файл з маркерами конфлікту може бути збережений у вигляді файлу з .origрозширенням.
Якщо для цієї змінної встановлено значення, falseцей файл не зберігається.
За замовчуванням true(тобто зберігати резервні файли).

Альтернативою є не додавання або ігнорування цих файлів, як це запропоновано в цій статті про gitguru ,

git mergetoolзберігає версію файлу злиття конфлікту з .origсуфіксом " ".
Обов’язково видаліть його, перш ніж додавати та здійснювати злиття чи додавання *.origдо свого .gitignore.

Берік пропонує в коментарях використовувати:

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

Чарльз Бейлі радить у своїй відповіді бути в курсі внутрішніх налаштувань різного інструменту, які також можуть створювати ці файли резервного копіювання, незалежно від налаштувань git.

  • kdiff3 має власні налаштування (див. " Злиття каталогів " у посібнику).
  • інші інструменти, такі як WinMerge, можуть мати власне розширення файлів резервної копії (WinMerge: .bakяк зазначено в його посібнику ).

Тому вам також потрібно скинути ці налаштування.


7
@Sophistifunk: хороший момент. Я відредагував відповідь, щоб використовувати належний знак.
VonC

10
Редагування параметрів у kdiff для мене працювало: Налаштування> Налаштувати Kdiff3> Каталог. Зніміть прапорець із позначкою "Резервні файли (.orig)"
kmgdev

2
git config --global mergetool.keepBackup false, Вирішено для P4Merge на Mavericks 10.9.2. Дякую :)
kpsfoo

1
@Sander Дякую Я відновив посилання.
VonC

5
Зауважте, що якщо ви вручну редагуєте .gitconfig, ви хочете keepBackup = falseпід [mergetool], а не під [mergetool "BeyondCompare4"]чи будь-яким іншим інструментом візуального злиття.
TrueWill

85

Ви повинні бути обережними з використанням, kdiff3оскільки поки git mergetoolможна налаштувати збереження .origфайлу під час об’єднання, поведінка за замовчуванням - kdiff3це також збереження .origрезервного файлу незалежно від git mergetool.

Ви повинні переконатися, що mergetoolрезервна копія вимкнена:

git config --global mergetool.keepBackup false

а також, що налаштування kdiff3 встановлені таким чином, щоб не створювати резервну копію:

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

4
Configure/Options => Directory Merge => Backup Files (*.orig)дійсно допомогло позбутися від усіх дивних іо-рабів, klauncher «» невідомого протоколу, і не могла створити .oor помилки. дякую
Геремія

2
Чому це git config --global mergetool.keepBackup falseпотрібно встановити?
Геремія

1
дозвольте мені виправити ваш перший рядок "Ви повинні бути трохи божевільним, щоб користуватися kdiff3" - там :-)
Тім Джарвіс,

@TimJarvis Я весь час використовую kdiff3 і мені це подобається. Цікаво, чи є причина називати це "трохи божевільним, щоб використовувати kdiff3", чи це просто жарт (я бачу, що посміхнене обличчя я не ображаюсь, я щиро прошу)
Квін Вілсон

35

Щоб було зрозуміло, правильна команда git така:

git config --global mergetool.keepBackup false

В обох інших відповідях в командному рядку є помилки друку, які спричинить його збій або неправильну роботу.


32

Можливість збереження .orig-файлу можна відключити, налаштувавши KDiff3

Файл резервного копіювання KDiff3


2
Це має бути реальним рішенням.
Гонді

Працює для мене. Дякую тобі @ richard-pierre
Андрій

У мене вже був встановлений глобальний конфігурація git належним чином, але все-таки були ці файли .orig при перезавантаженні / об'єднанні тощо. Налаштування Kdiff3 нарешті зробили свою справу.
Сесіль Фешероле

25

Я використовую це для очищення всіх файлів, що закінчуються на ".orig":

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

Якщо ви є кішкою переляку :), ви можете залишити останню частину лише для того, щоб перерахувати їх (або відмовитися, -rякщо ви хочете схвалити кожне видалення):

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

1
Цілком корисно, якщо ви все ще хочете створити резервні копії, поки ви не підготуєтеся до фіксації.
Келлі

5
Ви також можете додати * .orig у .gitignore на верхньому рівні, якщо у вас є резервні копії об’єднання.
Віль

11

Я просто використовую команду

git clean -n *.orig

Перевірте, чи перераховано лише файл, який я хочу видалити

git clean -f *.orig

1
Гарна порада! Було б добре, якщо ви також додали інші відповіді щодо налаштувань gitconfig (з інших відповідей).
AzP

10

Крім правильних відповідей, пропонованих як довгострокові рішення, ви можете використовувати git для видалення всіх непотрібних файлів один раз для вас git clean -fкомандою, але використовуватиgit clean --dry-run спочатку, щоб упевнитись, що нічого випадкового не трапиться.

Це має перевагу використання перевірених вбудованих функціональних можливостей Git над скриптами, характерними для вашої ОС / оболонки для видалення файлів.


4
Так, але будьте дуже обережні, оскільки ця команда робить набагато більше, ніж видалення файлів .orig.
кгхастіе

4

Або просто додати

* .orig

до вашого глобального gitignore


3
git config --global mergetool.keepBackup false

Це має працювати і для "Більше порівняння" (як mergetool)


0

Windows:

  1. в файлі Win/Users/HOME/.gitconfigнабірmergetool.keepTemporaries=false
  2. у файлі git/libexec/git-core/git-mergetool, у функції cleanup_temp_files()додати rm -rf -- "$MERGED.orig"всередині іншого блоку.

1
Дивіться прийняту відповідь. Це змінює основні інструменти і не є масштабованим.
олігофрен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.