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.