É possível "atualizar" um repositório git depois de atualizar o arquivo gitignore?
Acabei de adicionar mais ignorâncias (?) Ao meu gitignore e gostaria de remover coisas que já estão no repositório correspondentes ao novo arquivo.
É possível "atualizar" um repositório git depois de atualizar o arquivo gitignore?
Acabei de adicionar mais ignorâncias (?) Ao meu gitignore e gostaria de remover coisas que já estão no repositório correspondentes ao novo arquivo.
Respostas:
A solução mencionada em " O arquivo .gitignore não está ignorando " é um pouco extrema, mas deve funcionar:
# rm all files
git rm -r --cached .
# add all files as per new .gitignore
git add .
# now, commit for new .gitignore to apply
git commit -m ".gitignore is now working"
( certifique-se de confirmar primeiro as alterações que deseja manter , para evitar qualquer incidente, como os comentários do jball037 abaixo .
A --cached
opção mantém os arquivos intocados no disco.
Você também tem outra solução mais refinada na postagem do blog " Fazendo o Git ignorar arquivos já rastreados ":
git rm --cached `git ls-files -i --exclude-standard`
Bassim sugere em sua edição :
Caso você receba uma mensagem de erro como
fatal: path spec '...' did not match any files
, pode haver arquivos com espaços no caminho.Você pode remover todos os outros arquivos com a opção
--ignore-unmatch
:
git rm --cached --ignore-unmatch `git ls-files -i --exclude-standard`
mas os arquivos não correspondentes permanecerão no seu repositório e precisarão ser removidos explicitamente, colocando o caminho entre aspas duplas:
git rm --cached "<path.to.remaining.file>"
Posso entender mal, mas você está tentando excluir arquivos ignorados recentemente ou deseja ignorar novas modificações nesses arquivos? Nesse caso, a coisa está funcionando.
Se você deseja excluir arquivos ignorados confirmados anteriormente, use
git rm –cached `git ls-files -i –exclude-standard`
git commit -m 'clean up'
git ls-files -i –exclude-standard
git commit -m 'clean up' '
Sei que essa é uma pergunta antiga, mas a solução da gracchus não funciona se os nomes de arquivos contiverem espaços. A solução da VonC para arquivar nomes com espaços é não removê-los utilizando--ignore-unmatch
e removê-los manualmente, mas isso não funcionará bem se houver muito.
Aqui está uma solução que utiliza matrizes bash para capturar todos os arquivos.
# Build bash array of the file names
while read -r file; do
rmlist+=( "$file" )
done < <(git ls-files -i --exclude-standard)
git rm –-cached "${rmlist[@]}"
git commit -m 'ignore update'