.gitignore após confirmação


210

Eu tenho um repositório git hospedado no Github. Depois de cometer muitos arquivos, estou percebendo que eu preciso para criar .gitignoree excluir .exe, .objarquivos.

No entanto, ele removerá automaticamente esses arquivos confirmados do repositório? Existe alguma maneira de forçar isso?


6
Futuros googlers podem achar isso extremamente útil. Bem
Austin Dean

Respostas:


331

Não, você não pode forçar a remoção de um arquivo que já foi confirmado no repositório porque ele foi adicionado ao .gitignore

Você precisa git rm --cachedremover os arquivos que não deseja no repositório. (--cached porque você provavelmente deseja manter a cópia local, mas remover do repositório.) Portanto, se você deseja remover todos os exe's do repositório, faça

git rm --cached /\*.exe

(Observe que o asterisco * é citado no shell - isso permite que o git, e não o shell, expanda os nomes dos caminhos dos arquivos e subdiretórios)


6
@ Madhur Ahuja Na verdade, se você fizer git rm /\*.exeisso, todos os exe serão excluídos em seu repo #
manojlds

4
Para que servem os \ \ 's?
Costa

5
@ Costa estão lá para escapar do asterisco, para impedir que o shell o interprete, como pretendido git.
Lambart

2
Aviso: os arquivos são mantidos em local, é verdade ... Mas outros usuários que executam a git pullverão seus arquivos excluídos.
ByScripts

42

No entanto, ele removerá automaticamente esses arquivos confirmados do repositório?

Não. Mesmo com um existente, .gitignorevocê pode preparar arquivos "ignorados" com o -fsinalizador (force). Se os arquivos já tiverem sido confirmados, eles não serão removidos automaticamente.

git rm --cached path/to/ignored.exe

Isso significa que eu tenho remover individualmente cada .exe
Madhur Ahuja

Você é provavelmente capaz de lote isso, mas eu não sei como isso funciona no Windows
KingCrunch

30

Se você ainda não enviou as alterações:

git rm -r --cached .
git add .
git commit -m 'clear git cache'
git push

15

Eu tive que remover .idea e pastas de destino e depois de ler todos os comentários, isso funcionou para mim:

git rm -r .idea
git rm -r target
git commit -m 'removed .idea folder'

e depois pressione para dominar


.ideafoi o meu problema, acho que também foi seu:)
Olivier Pons

5

No entanto, ele removerá automaticamente esses arquivos confirmados do repositório?

Não.

A 'melhor' receita para fazer isso é usar git filter-branchcomo está escrito aqui:

A página de manual do git-filter-branch contém exemplos abrangentes.

Nota Você reescreverá o histórico. Se você publicou alguma revisão contendo os arquivos adicionados acidentalmente, isso pode criar problemas para os usuários dessas ramificações públicas. Informe-os ou talvez pense sobre o quanto você precisa remover os arquivos.

Nota Na presença de tags, sempre use a --tag-name-filter catopção para git filter-branch. Isso nunca dói e vai lhe poupar a dor de cabeça quando você perceber mais tarde que precisava


Executei este comando que mostrava Reescrever 57c1f1f04a3ed01f50c3260714cfc82c973ac816 (3/3) AVISO: Ref 'refs / heads / master' permanece inalterado e nada aconteceu #
Madhur Ahuja

É um aviso e provavelmente significa que a ramificação principal (ainda) não continha nenhuma revisão com os arquivos a serem removidos. Você pode facilmente verificar isso. Se houver algum problema, atualize a pergunta. PS: use - --allpara reescrever todas as ramificações (locais) de uma só vez
consulte

1

Mesmo depois de excluir o (s) arquivo (s) e depois confirmar, você ainda terá esses arquivos no histórico. Para excluí-los, considere usar o BFG Repo-Cleaner . É uma alternativa ao git-filter-branch.

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.