Eu tenho alguns arquivos no meu repositório que devem ser ignorados, eu os adicionei ao .gitignore, mas é claro que eles não são removidos do meu repositório.
Portanto, minha pergunta é: existe um comando ou script mágico usando o branch-filter que pode reescrever meu histórico e remover todos esses arquivos facilmente? Ou simplesmente um comando que criará uma confirmação que os removerá?
Respostas:
Você pode removê-los do repositório manualmente:
Ou, se você tiver muitos arquivos:
Mas isso não parece funcionar no Git Bash no Windows. Produz uma mensagem de erro. O seguinte funciona melhor:
Em relação à reescrita de toda a história sem esses arquivos, duvido muito que exista uma maneira automática de fazer isso.
E todos sabemos que reescrever a história é ruim, não é? :)
fonte
git ls-files -i -z --exclude-from=.gitignore | xargs -0 git rm --cached
parece fazer o truquegit ls-files -i --exclude-from=.gitignore | %{git rm --cached $_}
Uma maneira mais fácil que funciona em qualquer sistema operacional é fazer
Você basicamente lê todos os arquivos, exceto os do .gitignore
fonte
Como os arquivos no .gitignore não estão sendo rastreados, você pode usar o comando git clean para remover recursivamente os arquivos que não estão sob controle de versão.
Use
git clean -xdn
para executar uma corrida a seco e ver o que será removido.Então use
git clean -xdf
para executá-lo.Basicamente,
git clean -h
ouman git-clean
(em unix) lhe dará ajuda.Esteja ciente de que este comando também removerá novos arquivos que não estão na área de preparação.
Espero que ajude.
fonte
.gitignore
estão sendo rastreados.git clean -xdn
é uma execução a seco que não será excluída. o próximo será.Eu fiz uma solução muito simples, manipulando a saída da instrução .gitignore com sed:
cat .gitignore | sed '/^#.*/ d' | sed '/^\s*$/ d' | sed 's/^/git rm -r /' | bash
Explicação:
fonte
sed
é simples?No linux, você pode usar este comando:
por exemplo, eu quero excluir "* .py ~", então meu comando deve ser ==>
find . -name "*.py~" -exec rm -f {} \;
fonte
O git ignorará os arquivos correspondentes ao padrão .gitignore depois de adicioná-lo ao .gitignore.
Mas os arquivos já existentes no repositório ainda estarão no.
use
git rm files_ignored; git commit -m 'rm no use files'
para excluir arquivos ignorados.fonte