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

Чарльз Бейли советует в своем ответе знать о внутренних настройках diff, которые также могут генерировать эти файлы резервных копий, независимо от настроек git.

  • kdiff3 имеет свои собственные настройки (см. « Слияние каталогов » в его руководстве).
  • другие инструменты, такие как WinMerge, могут иметь собственное расширение файла резервной копии (WinMerge:, .bakкак указано в его руководстве ).

Поэтому вам необходимо сбросить эти настройки.


7
@ Софистифанк: хорошая мысль. Я отредактировал ответ, чтобы использовать правильный знак.
VonC

10
У меня редактирование настроек в самом kdiff сработало: Настройки> Настроить Kdiff3> Каталог. Снимите флажок «Резервное копирование файлов (.orig)»
kmgdev

2
git config --global mergetool.keepBackup false, Решено для P4Merge на Маверикс 10.9.2. Спасибо :)
kpsfoo

1
@ Сандер Спасибо. Я восстановил ссылку.
VonC

5
Обратите внимание, что если вы вручную редактируете свой .gitconfig, вам нужен инструмент keepBackup = falseunder [mergetool], а не under [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)действительно помог избавиться от всех странных неизвестных протоколов io-slave, klauncher «» и не смог создать ошибки .orig. спасибо
Геремия

2
Почему git config --global mergetool.keepBackup falseдолжен быть установлен?
Геремия,

1
позвольте мне исправить вашу первую строку "Вы должны быть немного сумасшедшими, чтобы использовать kdiff3" - там :-)
Тим Джарвис

@TimJarvis Я использую kdiff3 все время, и мне это нравится. Интересно, есть ли причина называть это «немного сумасшедшим, чтобы использовать kdiff3» или это просто шутка (я вижу улыбающееся лицо, я не буду обижаться в любом случае, я искренне спрашиваю)
Куинн Уилсон

35

Для ясности, правильная команда git:

git config --global mergetool.keepBackup false

Оба других ответа содержат опечатки в командной строке, которые приведут к сбою или неправильной работе.


32

Опцию сохранения файла .orig можно отключить, настроив KDiff3

KDiff3 Резервная копия файла .orig опция


2
Это должно быть реальным решением.
Гонди

Работает для меня. Большое спасибо @ Richard-Pierre
Эндрю

У меня уже был настроен глобальный git config, но все еще были эти .orig файлы на rebase / merge и т. Д. Настройки 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 (из других ответов).
АзП

10

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

Преимущество использования проверенных встроенных функций Git перед скриптами, специфичными для вашей ОС / оболочки, для удаления файлов.


4
Да, но будьте очень осторожны, так как эта команда делает гораздо больше, чем просто удаляет файлы .orig.
kghastie


3
git config --global mergetool.keepBackup false

Это должно работать и для Beyond Compare (как mergetool)


0

Окна:

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

1
Смотрите принятый ответ. Это модифицирует основные инструменты и не масштабируется.
oligofren
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.