Como excluir arquivos .orig após mesclar do repositório git?

160

De alguma forma, como os arquivos .orig são verificados no meu repositório git durante a mesclagem, que agora são exibidos no setor modificado e não rastreado. Mas não quero mais esses arquivos no meu repositório. Como fazer isso.

    modified:   Gemfile.lock.orig
    #   modified:   Gemfile.orig
    #   modified:   app/assets/images/bg_required.png.orig
    #   modified:   app/assets/javascripts/application.js.orig

    etc...

Qualquer ajuda será apreciada.

maximus ツ
fonte
@ziu, eu quero remover arquivos que já estão presentes no meu repositório, Verificado por merge git ou por algum outro desenvolvedor
maximusツ
1
Perdi a parte sobre os arquivos registrados. No entanto, os arquivos .orig são gravados por mergetool. Parece-me uma resolução de conflito não limpa.
ziu
Você precisa remover completamente o arquivo de todo o histórico?
linquize

Respostas:

253

A melhor solução nesse caso é mantê-lo simples e se livrar desses arquivos independentemente do git:

cd /your/repo/directory
find . -name '*.orig' -delete 

Como alternativa, no Windows / PowerShell, você pode executar o seguinte comando

cd \your\repo\directory
Get-ChildItem -Recurse -Filter '*.orig' | Remove-Item
TheChymera
fonte
14
Se você receber um erro de predicado, use: find. -name '* .orig' | xargs rm -f
Neil
Apenas como um aviso, o uso de 'find -delete' pode ser perigoso. Verifique se o diretório (neste caso '.') Está correto para garantir que você esteja excluindo apenas o que deseja excluir
kingledion
8
É uma dor que git clean -dfnão faz isso. Por que devemos limpar manualmente o lixo que ele deixa para trás?
Sridhar Sarnobat
E o Windows?
Panzercrisis 17/05/19
3
@ Panzercrisis, se você estiver usando o Windows, provavelmente já terá um emulador de terminal por meio do qual faz interface com o Git. Eu recomendaria o "gitforwindows", que contém o BASH com todas as outras ferramentas necessárias.
TheChymera
151

Tente git cleanmais informações que você pode encontrar aqui ou aqui

Amar
fonte
1
Posso limpar arquivos não rastreados, mas que tal remover esses arquivos que já estão no repositório?
maximusツ
você precisa primeiro remover o arquivo do repositório git rm <filename>e, em seguida, confirmar.após esse arquivo add * .orig no git ignore.
Amar
4
Penso que esta é uma solução melhor do que a marcada como resposta.
Orgmir 26/03
51
git clean -iÉ realmente bom. ele fornecerá uma lista de arquivos que serão excluídos e opções de como lidar com a lista (filtre a lista, podendo excluir tudo da lista e algumas outras opções).
precisa saber é o seguinte
1
Você pode usar o git clean com padrões para ajudar a excluir apenas os arquivos * .orig: git clean -f -e '*.*' -e '!*.orig' existe apenas um padrão de exclusão, mas possui um pequeno suporte para padrões negativos. Portanto, podemos excluir todos os arquivos *.*e negar a exclusão apenas dos *.origarquivos.
Leorleor
6

Você pode ignorar arquivos usando .gitignore

Basta colocar * .orig na lista como mostrado aqui

https://help.github.com/articles/ignoring-files

para excluir arquivos atuais, você pode criar um shell script e executar a partir da pasta do projeto, como abaixo

for file in `find *.orig -type f -print`
do
   echo "Deleting file $file"
   git rm $file -f       
done
Loken Makwana
fonte
5
Embora ele certamente pode fazer isso, não é a coisa certa a fazer aqui :)
Sergio Tulentsev
1
I acha que é uma boa idéia, pois mantém o backup, mas não interfere arquivos de teste
akazemis
@akazemis - você acha que sim, mas quando está procurando pelo código, vê o dobro dos resultados de pesquisa que deseja (o que fornece uma falsa percepção do que está no seu código mais recente). É tão raro que eu prefiro viver com o perigo de não ter arquivos orig. É melhor apenas se comprometer regularmente.
Sridhar Sarnobat
5

Infelizmente git clean, não funciona para mim porque eu *.origadicionei ao meu arquivo gitignore global, portanto eles também são ignorados da limpeza. Mesmo correr git clean -xnão é bom porque não quero que todos os meus arquivos ignorados sejam excluídos. git clean -ié útil, mas realmente não quero ter que revisar cada arquivo.

No entanto, podemos usar um padrão de exclusão e negar a correspondência. Visualize com este comando:

git clean -e '!*.orig' --dry-run

Então, quando estiver confiante, passe a forcebandeira para realmente excluí-los:

git clean -e '!*.orig' -f

Com base no comentário de leorleor

Jeff Puckett
fonte
3

git rm Gemfile.lock.orig e o restante dos arquivos que você não precisa. git commit --amend

Para remover completamente esses blobs, git gc --prune=0 --aggressive

ceder
fonte
@linquiz; mas o commit do git rm Gemfile.lock.orig irá no último commit usando o commit, certo? existe alguma outra maneira de não ter nenhum commit para esse arquivo?
maximusツ
2

Para mim, git clean -ftodos os arquivos * .oig foram removidos. E mantém os que já estavam lá antes.

É assim que (quase) parecia após a mesclagem:

$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/codeStyles/
    .idea/misc.xml.orig

.idea/codeStyles/já estava lá antes da mesclagem como um arquivo não rastreado. .idea/misc.xml.orig(e muito mais) teve que ser removido.

=> Usando git clean -f:

$ git clean -f
Removing .idea/misc.xml.orig

resultou em:

$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/codeStyles/
Ueffes
fonte
0

você pode simplesmente fazer git status -s | grep "\.orig$" | awk '{print $2}' | xargs -n1 -r echo rm

TL; DR;

git status -s permite que você obtenha todos os arquivos modificados / ausentes em relação ao índice

grep "\.orig$" filtrar arquivos, mantendo o final com ".orig"

awk '{print $2}' lista o nome do arquivo (ignorando informações git, por exemplo, A, M, ??)

xargs -n1 -r echo rm imprime remove comandos em todos os argumentos (-n1: um de cada vez e -r: pula quando vazio), basta copiar e colar os comandos, verificando novamente os arquivos a serem removidos.

fiorentinoing
fonte
Embora isso possa responder à pergunta dos autores, faltam algumas palavras explicativas e / ou links para a documentação. Os trechos de código bruto não são muito úteis sem algumas frases ao seu redor. Você também pode descobrir como escrever uma boa resposta muito útil. Edite sua resposta.
hellow
-4

git rm <file>

http://git-scm.com/docs/git-rm

Adicione também arquivos / diretórios que você deseja ignorar ao seu arquivo .gitignore.

veritas1
fonte
git rm <file> <file>Apenas liste-os.
Veritas1
Então você precisa listar todos os arquivos, ou usar uma ferramenta como find para passá-los para o git rm ou usar um shell glob e fazer um loop sobre eles. O Git não duplica essa funcionalidade padrão da linha de comando do Unix.
amigos estão dizendo sobre mabraham
1
orig arquivos não são adicionados ao repositório, por isso não há necessidade de usar git rm, basta usar rmvez
Edson Medina