.gitignore exclui arquivo específico

94

Estou tentando usar o .gitignorearquivo para excluir templates.jslocalizado na public/app/pasta. Minhas.gitignore arquivo se parece com este:

/vendor
/node_modules
composer.phar
composer.lock
.DS_Store
templates.js

Mas quando eu dou check no Git Gui, o templates.jsarquivo ainda está aparecendo nele. Como posso excluir especificamente um arquivo usando .gitignore?

user1995781
fonte
2
Isso significa que o arquivo já foi adicionado ao repositório antes? .gitignoreapenas ignora o conteúdo a ser adicionado.
Willem Van Onsem
2
@CommuSoft Sim, já foi adicionado ao repositório antes. Então, como posso excluí-lo agora? A minha maneira de agir está .gitignorecorreta?
user1995781

Respostas:

152

Em contraste com o que o nome "ignorar" pode sugerir. .gitignoresó é consultado quando você git addarquiva: em outras palavras, um arquivo já adicionado ao (índice do) repositório não será excluído com base no .gitignore.

Primeiro é melhor modificar o de .gitignoremodo que o arquivo não seja mais adicionado. Adicione a seguinte linha ao .gitignorearquivo:

public/app/template.js

Em seguida, você precisa excluir o arquivo do repositório. Provavelmente você não deseja remover o arquivo de seu sistema de arquivos, isso pode ser feito com:

git rm --cached public/app/template.js

O --cachedsinalizador garante que o arquivo não será removido do sistema de arquivos. (Se não for importante, você pode usar git rm public/app/template.js, mas isso removerá o arquivo ).

fundo

O motivo pelo qual .gitignorenão é usado proativamente é porque às vezes você pode querer substituir o .gitignore. Digamos, por exemplo, que você não deseja rastrear *.logarquivos, você pode especificar *.logno .gitignore. Mas se houver um específico que você deseja rastrear, você pode adicionar git add -f some.log. O -fsinalizador obriga gita adicionar o arquivo.

Willem Van Onsem
fonte
um salva-vidas, tive minhas credenciais abertas ao público
mLstudent33
21

Uma vez que um arquivo tenha sido 'adicionado' ao repositório git uma vez, ele continuará a ser rastreado independentemente de estar ou não listado no arquivo .gitignore.

Suponho que você tenha adicionado o arquivo template.js anteriormente, caso em que continuará a ter alterações rastreadas, até que você o remova do repositório. Depois que o arquivo for removido do repositório, ele será ignorado de forma adequada por meio do arquivo .gitignore.

A maneira de remover um arquivo de um repositório git (linha de comando) sem excluí-lo é

git rm --cached FILENAME

Então, uma vez que você fizer isso e tentar fazer o commit com o arquivo em seu gitignore, não vai adiantar.

Observe que se você adicionar especificamente um arquivo que possui em seu gitignore, a adição manual do arquivo substituirá o gitignore.

BTownTKD
fonte
Obrigado querido, "git rm --cached FILENAME" funcionou perfeitamente :)
Kamlesh
11

Se você já está rastreando um arquivo ( git addnele e git commit), .gitignorenão vai ajudar.

Eu acredito que o que você quer é parar de rastrear um arquivo e então usar .gitignorepara excluí-lo. Para interromper o rastreamento de um arquivo, mas mantê-lo, use:

git rm --cached <file>

Ross
fonte
não dv, mas acho que você talvez deva selecionar melhor suas palavras. mantê-lo no repositório é um pouco diferente de mantê-lo no sistema de arquivos local . Um repositório não mapeia em um sistema de arquivos ...
Willem Van Onsem
@CommuSoft Consertado com alguma satisfação, não fui muito cuidadoso porque outras pessoas responderam melhor. Obrigado pela sugestão.
Ross
7

Neste caso, você pode interromper o rastreamento templates.jscom

git rm --cached public/app/templates.js

Como outros explicaram, .gitignoreapenas ignora o conteúdo a ser adicionado. Por exemplo, se você costuma usar git add .e tem templates.jsem seu .gitignore, então git não irá adicioná-lo.

Thomas Hughes
fonte