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.