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?

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.


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)

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.


32

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

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


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" "
}

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

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.


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


3
git config --global mergetool.keepBackup false

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


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.

1
Veja a resposta aceita. Isso modifica as principais ferramentas e não é escalável.
Oligofren
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.