Remover um arquivo existente de um repositório Git
126
Quero que o git pare de rastrear meu log de desenvolvimento local (log / development.log) em nossos repositórios. Isso é possível e como posso fazer isso?
Apenas para dar a resposta completa de uma só vez:
from klemens: você precisa adicionar o arquivo em .gitignorealgum lugar acima do arquivo indesejado no repositório. ie
$ cd $ cat >> .gitignore development.log Cd
De. narebski: Em seguida, você precisa remover o arquivo do repositório executando " git rm --cached <file>e confirmando esta remoção"
Se você também esperava fazer com que o repositório parecesse nunca ter rastreado esse arquivo, isso é muito mais complicado e altamente desencorajado, pois não apenas cria novos commit para cada commit em sua história, destruindo a interoperabilidade de maneira desagradável. entre outras pessoas que clonaram seu repositório, mas isso também deixa todos os commit não testados (supondo que você teste seus commit antes de realizá-los).
Com essa ressalva, a ferramenta que você está procurando se esse é seu objetivo filter-branch. O primeiro exemplo faz exatamente o que estou descrevendo.
O uso do git rm --cached parece não apenas removê-lo da ramificação, mas quando puxo para outro sistema, ele exclui os arquivos fisicamente naquele sistema. Alguma idéia do que está acontecendo lá?
biagidp
2
Em resposta ao exposto: acredito que o problema estava no fato de eu não ter o .gitignore instalado no sistema alternativo antes de efetuar as alterações, portanto, a exclusão removeu a cópia local. Pelo menos essa é a teoria #
2223 biagidp
53
Para parar de rastrear o arquivo, basta usar git rm --cached <filename>.
Mas, como indicado pelas outras pessoas aqui, adicionar o arquivo ao .gitignore pode impedir que você o adicione acidentalmente novamente mais tarde.
Esta é apenas metade da resposta. .gitignoreas entradas não se aplicam a arquivos que já estão sendo rastreados.
CB Bailey
10
A segunda parte é git rm --cached <file>e, em seguida, confirma essa remoção.
Jakub Narębski
1
Por que não existe um comando simples para o git reavaliar todos os arquivos rastreados atualmente de acordo com o arquivo .gitignore atual? ... ou isso está exercendo muito senso comum? : p
Respostas:
Apenas para dar a resposta completa de uma só vez:
from klemens: você precisa adicionar o arquivo em
.gitignore
algum lugar acima do arquivo indesejado no repositório. ie$ cd $ cat >> .gitignore development.log Cd
De. narebski: Em seguida, você precisa remover o arquivo do repositório executando "
git rm --cached <file>
e confirmando esta remoção"Se você também esperava fazer com que o repositório parecesse nunca ter rastreado esse arquivo, isso é muito mais complicado e altamente desencorajado, pois não apenas cria novos commit para cada commit em sua história, destruindo a interoperabilidade de maneira desagradável. entre outras pessoas que clonaram seu repositório, mas isso também deixa todos os commit não testados (supondo que você teste seus commit antes de realizá-los).
Com essa ressalva, a ferramenta que você está procurando se esse é seu objetivo
filter-branch
. O primeiro exemplo faz exatamente o que estou descrevendo.fonte
Para parar de rastrear o arquivo, basta usar
git rm --cached <filename>
.Mas, como indicado pelas outras pessoas aqui, adicionar o arquivo ao .gitignore pode impedir que você o adicione acidentalmente novamente mais tarde.
fonte
adicione o arquivo gitignore.
consulte http://git-scm.com/docs/gitignore
fonte
.gitignore
as entradas não se aplicam a arquivos que já estão sendo rastreados.git rm --cached <file>
e, em seguida, confirma essa remoção.