.gitignore excluir archivo específico

94

Estoy tratando de usar el .gitignorearchivo para excluir templates.jsubicado en la public/app/carpeta. Mi .gitignorearchivo se ve así:

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

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

user1995781
fuente
2
¿Eso significa que el archivo ya se agregó al repositorio antes? .gitignoresolo ignora el contenido que se agregará.
Willem Van Onsem
2
@CommuSoft Sí, se ha agregado al repositorio antes. Entonces, ¿cómo puedo excluirlo ahora mismo? ¿Mi forma de hacerlo es .gitignorecorrecta?
user1995781

Respuestas:

152

En contraste con lo que podría sugerir el nombre "ignorar". .gitignoresolo se consulta cuando sus git addarchivos: en otras palabras, un archivo ya agregado al (índice del) repositorio no se excluirá en función del .gitignore.

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

public/app/template.js

A continuación, debe excluir el archivo del repositorio. Probablemente no desee eliminar el archivo de su sistema de archivos, esto se puede hacer con:

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

La --cachedbandera garantiza que el archivo no se eliminará de su sistema de archivos. (Si no es importante, puede usar git rm public/app/template.js, pero esto eliminará el archivo ).

Antecedentes

El motivo por el .gitignoreque no se utiliza de forma proactiva es que a veces es posible que desee anular el .gitignore. Digamos, por ejemplo, que no desea rastrear *.logarchivos, puede especificar *.logen el .gitignore. Pero si hay uno específico que desea rastrear, puede agregarlo git add -f some.log. La -fbandera obliga gita agregar el archivo.

Willem Van Onsem
fuente
un salvavidas, abrí mis credenciales al público
mLstudent33
21

Una vez que un archivo ha sido 'agregado' al repositorio de git una vez, continuará siendo rastreado independientemente de si aparece o no en el archivo .gitignore.

Supongo que agregó el archivo template.js anteriormente, en cuyo caso continuará con el seguimiento de los cambios, hasta que lo elimine del repositorio. Una vez que el archivo se ha eliminado del repositorio, se ignorará correctamente a través del archivo .gitignore.

La forma de eliminar un archivo de un repositorio de git (línea de comandos) sin eliminarlo es

git rm --cached FILENAME

Luego, una vez que hagas eso e intentes comprometerte con el archivo en tu gitignore, no lo hará.

Tenga en cuenta que si agrega específicamente un archivo que tiene en su gitignore, su adición manual del archivo anulará el gitignore.

BTownTKD
fuente
Gracias querido, "git rm --cached FILENAME" funcionó a la perfección :)
Kamlesh
11

Si ya está rastreando un archivo ( git adden él y git commit), .gitignoreno ayudará.

Creo que lo que quieres es dejar de rastrear un archivo y luego usarlo .gitignorepara excluirlo. Para dejar de rastrear un archivo pero conservarlo, use:

git rm --cached <file>

Ross
fuente
no dv, pero creo que quizás debería seleccionar mejor sus palabras. mantenerlo en el repositorio contrasta un poco con mantenerlo en su sistema de archivos local . Un repositorio no mapa en un sistema de archivos ...
Willem Van Onsem
@CommuSoft Arreglado con cierta satisfacción, no fui demasiado cuidadoso porque otras personas lo han respondido mejor. Gracias por la sugerencia.
Ross
7

En este caso, puede dejar de rastrear templates.jscon

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

Como han explicado otros, .gitignoresolo ignora el contenido que se agregará. Por ejemplo, si usa con frecuencia git add .y tiene templates.jsen su .gitignore, entonces git no lo agregará.

Thomas Hughes
fuente