.gitignore excluye file específico

Estoy intentando usar el file .gitignore para excluir templates.js ubicado en public/app/ folder. Mi file .gitignore ve así:

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

Pero cuando reviso el Git Gui, el file templates.js aún se muestra en él. ¿Cómo puedo excluir específicamente un file usando .gitignore ?

En contraste con lo que el nombre "ignorar" podría sugerir. .gitignore solo se consulta cuando se git add files: en otras palabras, un file ya agregado al repository (del índice de) no se excluirá en function de .gitignore .

Primero es mejor que modifique el .gitignore modo que el file ya no se agregue. Agregue la siguiente línea al file .gitignore :

 public/app/template.js 

A continuación, debe excluir el file del repository. Probablemente no desee eliminar el file de su sistema de files, esto se puede hacer con:

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

El indicador de --cached garantiza que el file no se eliminará de su sistema de files. (Si no es importante, puede usar git rm public/app/template.js , pero esto eliminará el file ).

Fondo

La razón por la que .gitignore no se usa de manera proactiva es porque a veces es posible que desee anular el .gitignore . Digamos, por ejemplo, que no desea rastrear los files *.log , puede especificar *.log en .gitignore . Pero si hay una específica que desea rastrear, puede agregar git add -f some.log . La bandera -f fuerza a git a agregar el file.

Una vez que un file ha sido 'agregado' al repository de git una vez, se seguirá rastreando independientemente de si está listdo o no en el file .gitignore.

Supongo que agregó el file template.js anteriormente, en cuyo caso continuará teniendo seguimiento de los cambios, hasta que lo elimine del repository. Una vez que el file ha sido eliminado del repository, será ignorado adecuadamente a través del file .gitignore.

La forma de eliminar un file de un repository de git (command-line) sin borrarlo es

 git rm --cached FILENAME 

Entonces, una vez que haces eso y tratas de comprometerse con el file en tu gitignore, no lo hará.

Tenga en count que si agrega específicamente un file que tenga en su gitignore, su adición manual del file anulará el gitignore.

En este caso, puede detener el seguimiento de templates.js con

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

Como otros han explicado, .gitignore solo ignora el contenido que se agregará. Por ejemplo, si usa git add . frecuencia git add . y tiene templates.js en su .gitignore , luego git no lo agregará.

Si ya está rastreando un file ( git add en él y git commit ), .gitignore no ayudará.

Creo que lo que quieres es dejar de rastrear un file y luego usar .gitignore para excluirlo. Para detener el seguimiento de un file pero conservar el file, use:

git rm --cached <file>