Git mergetool gera arquivos .orig indesejados

486

Quando faço uma resolução de conflitos de mesclagem com o Kdiff3 (e outra ferramenta de mesclagem que tentei), notei que na resolução um *.origarquivo é criado. Existe uma maneira de não criar esse arquivo extra?

Akeem
fonte

Respostas:

771

Uma possível solução de git config:

git config --global mergetool.keepBackup false

Após realizar uma mesclagem, o arquivo original com marcadores de conflito pode ser salvo como um arquivo com uma .origextensão.
Se essa variável estiver definida como false, esse arquivo não será preservado.
O padrão trueé (por exemplo, manter os arquivos de backup).

A alternativa é não adicionar ou ignorar esses arquivos, conforme sugerido neste artigo do gitguru ,

git mergetoolsalva a versão de conflito de mesclagem do arquivo com o .origsufixo " ".
Exclua-o antes de adicionar e confirmar a mesclagem ou adicionar *.origao seu .gitignore.

Berik sugere nos comentários para usar:

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

Charles Bailey aconselha em sua resposta estar ciente das configurações internas da ferramenta diff que também podem gerar esses arquivos de backup, independentemente das configurações do git.

  • O kdiff3 possui suas próprias configurações (consulte " Mesclagem de diretório " em seu manual).
  • outras ferramentas como o WinMerge podem ter sua própria extensão de arquivo de backup (WinMerge:, .bakcomo mencionado em seu manual ).

Então você precisa redefinir essas configurações também.

VonC
fonte
7
@ Sophistifunk: bom ponto. Eu editei a resposta para usar o sinal apropriado.
VonC
10
A edição das configurações no próprio kdiff funcionou para mim: Configurações> Configurar o Kdiff3> Diretório. Desmarque a caixa "Arquivos de backup (.orig)"
kmgdev 5/09/13
2
git config --global mergetool.keepBackup false, Resolvido para P4Merge no Mavericks 10.9.2. Obrigado :)
kpsfoo
1
@Sander Obrigado. Eu restaurei o link.
VonC 26/03/2015
5
Observe que, se você estiver editando manualmente o seu .gitconfig, deseja a ferramenta keepBackup = falseunder [mergetool], not under [mergetool "BeyondCompare4"]ou qualquer outra ferramenta de mesclagem visual configurada.
TrueWill 19/09/16
85

Você deve ter um pouco de cuidado ao usar kdiff3enquanto git mergetoolpode ser configurado para salvar um .origarquivo durante a mesclagem, o comportamento padrão kdiff3para também é salvar um .origarquivo de backup independentemente git mergetool.

Você precisa garantir que o mergetoolbackup esteja desativado:

git config --global mergetool.keepBackup false

e também que as configurações do kdiff3 estão definidas para não criar um backup:

Configure/Options => Directory Merge => Backup Files (*.orig)
CB Bailey
fonte
4
Configure/Options => Directory Merge => Backup Files (*.orig)realmente ajudou a se livrar de todo o estranho protocolo io-slave, klauncher «» desconhecido, e não conseguiu criar erros .orig. obrigado
Geremia
2
Por que git config --global mergetool.keepBackup falseprecisa ser definido?
Geremia
1
deixe-me corrigir sua primeira linha "Você tem que ser um pouco louco para uso kdiff3" - há :-)
Tim Jarvis
@ TimJarvis Eu uso o kdiff3 o tempo todo e gosto disso. Eu me pergunto se existe uma razão para chamá-lo de "um pouco louco de usar o kdiff3" ou se isso é apenas brincadeira (eu vejo o rosto sorridente, não vou me ofender de qualquer maneira, estou sinceramente perguntando)
Quinn Wilson
35

Para ser claro, o comando git correto é:

git config --global mergetool.keepBackup false

As outras respostas têm erros de digitação na linha de comando que farão com que ela falhe ou não funcione corretamente.

John
fonte
32

A opção de salvar o arquivo .orig pode ser desativada configurando o KDiff3

Opção .orig do arquivo de backup do KDiff3

xx1xx
fonte
2
Essa deve ser a solução real.
Gondy
Funciona para mim. Muito obrigado @ richard-pierre
Andrew
Eu já tinha a configuração global do git definida corretamente, mas ainda tinha os arquivos .orig em rebase / mesclagem etc. As configurações do Kdiff3 finalmente fizeram o truque.
Cécile Fecherolle
25

Eu uso isso para limpar todos os arquivos que terminam em ".orig":

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

Se você é um gato assustador :), você pode deixar a última parte de fora apenas para listá-los (ou deixar de lado -rse desejar aprovar cada exclusão):

function git-show-orig {
    git status -su | grep -e"\.orig$" | cut -f2 -d" "
}
kghastie
fonte
1
Totalmente útil se você ainda deseja os backups até se preparar para confirmar.
Kelly
5
Você também pode adicionar * .orig no .gitignore no nível superior, se continuar mesclando backups.
Ville
11

Eu simplesmente uso o comando

git clean -n *.orig

verifique se apenas o arquivo que eu quero remover está listado

git clean -f *.orig
Rodneyk
fonte
1
Uma boa dica! Seria bom se você também adicionasse outras respostas sobre as configurações do gitconfig (de outras respostas).
AZP
10

Além das respostas corretas oferecidas como soluções de longo prazo, você pode usar o git para remover todos os arquivos desnecessários uma vez para você com o git clean -fcomando, mas use git clean --dry-runprimeiro para garantir que nada inesperado aconteça.

Isso tem o benefício de usar a funcionalidade incorporada testada do Git sobre scripts específicos do seu SO / shell para remover os arquivos.

haleonj
fonte
4
Sim, mas tenha muito cuidado, pois esse comando faz muito mais do que remover os arquivos .orig.
kghastie
4

Ou apenas adicione

* .orig

ao seu gitignore global

cd491415
fonte
3
git config --global mergetool.keepBackup false

Isso deve funcionar para o Beyond Compare (como mergetool) também

Atul
fonte
0

Janelas:

  1. no Win/Users/HOME/.gitconfigconjunto de arquivosmergetool.keepTemporaries=false
  2. em Arquivo git/libexec/git-core/git-mergetool, na função cleanup_temp_files()adicione rm -rf -- "$MERGED.orig"dentro do bloco else.
Michal
fonte
1
Veja a resposta aceita. Isso modifica as principais ferramentas e não é escalável.
Oligofren