Git mergetool создает ненужные файлы .orig

486

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

Akeem
источник

Ответы:

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как указано в его руководстве ).

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

VonC
источник
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)
CB Bailey
источник
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 опция

xx1xx
источник
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" "
}
kghastie
источник
1
Очень полезно, если вы все еще хотите создавать резервные копии, пока не будете готовы к фиксации.
Келли
5
Вы также можете добавить * .orig в .gitignore на верхнем уровне, если будете хранить резервные копии слиянием.
Вилле
11

Я просто использую команду

git clean -n *.orig

убедитесь, что в списке указаны только те файлы, которые я хочу удалить

git clean -f *.orig
Rodneyk
источник
1
Хороший совет! Было бы хорошо, если бы вы также добавили другие ответы, касающиеся настроек gitconfig (из других ответов).
АзП
10

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

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

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

Или просто добавь

* .orig

к вашему глобальному gitignore

cd491415
источник
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