2009-08-09 5 views
354

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

ответ

577

Возможное решение от git config:

git config --global mergetool.keepBackup false 

После выполнения слияния, исходный файл с маркерами конфликта может быть сохранен в виде файла с расширением .orig.
Если эта переменная установлена ​​на false, этот файл не сохраняется.
По умолчанию true (т. Е. Сохранить файлы резервной копии).

Альтернативой является не добавлять или игнорировать эти файлы, как это было предложено в этом gitguru article,

git mergetool сохраняет версию слиянием конфликтного файла с «.orig» суффикс.
Обязательно удалите его перед добавлением и фиксацией слияния или добавьте *.orig в ваш .gitignore.

Berik предлагает in the comments использовать:

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

Charles Bailey советует в his answer чтобы быть в курсе внутренних настроек дифф инструмента которые также могут генерировать эти резервные копии файлов, независимо от того, что мерзавец настройки.

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

Таким образом, вам также необходимо сбросить эти настройки.

+6

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

+5

Редактирование настроек в kdiff для меня работало: Настройки> Настроить Kdiff3> Directory. Снимите флажок «Резервные файлы (.orig)» – kgrote

+0

Спасибо за упоминание WinMerge - это была моя проблема. –

64

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

Вы должны убедиться, что mergetool резервное копирование выключено:

git config --global mergetool.keepBackup false 

, а также параметры, которые KDiff3 в настроены, чтобы не создавать резервную копию:

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

'Configure/Options => Merge => Резервные файлы (* .orig)' действительно помогли избавиться от всего неизвестного неизвестного протокола io-slave, klauncher «» и не смогли создать ошибки .orig. спасибо – Geremia

+1

Почему необходимо установить git config -global mergetool.keepBackup false? – Geremia

27

Чтобы быть ясно, правильная команда мерзавец это:

git config --global mergetool.keepBackup false 

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

22

Я использую это, чтобы очистить все файлы, оканчивающиеся на «.orig»:

Если вы Scaredy-кот :) Вы можете оставить последнюю часть от просто перечислить их (или оставить от -r, если вы хотите, чтобы одобрить каждое удаление):

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

Весьма полезно, если вы все еще хотите создавать резервные копии, пока не будете готовы к фиксации. – Kelly

+3

Вы также можете добавить * .orig в .gitignore на верхнем уровне, если вы сохраните резервные копии слияния. – Ville

6

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

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

+3

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

20

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

KDiff3 Backup file .orig option

+1

Это должно быть реальное решение. – Gondy

+0

Хорошая идея, спасибо Ричард – akazemis

+0

Работает для меня. Большое вам спасибо @ richard-pierre – Drew

1
git config --global mergetool.keepBackup false 

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

-2

Окна:

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

См. Принятый ответ. Это изменяет основные инструменты и не масштабируется. – oligofren

2

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

git clean -n *.orig 

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

git clean -f *.orig 
Смежные вопросы