¿Cómo puedo excluir archivos con cierta extensión dentro de un directorio concreto en Git?

En un repositorio de git, existen algunos archivos con una extensión que quiero excluir de un directorio particular y sus "hijos" pero que no quiero se excluyan del resto de directorios.

Supongamos que tengo esta estructura de archivos:

/dir1/a.js
/dir1/sub1/b.js
/dir2/c.js

Querría excluir todos los archivos con extensión .js dentro de dir1 (a.js y b.js), mientras que c.js debería mantenerse.

Ya he probado añadiendo este archivo . Gitignore a la raíz sin resultado:

/dir1/**/.js

También he intentado añadir un archivo .gitignore en la carpeta que quiero ignorar (/dir1/.gitignore) y tampoco ha funcionado:

*.js
Respuesta
3

Hasta la versión 1.8.2 de git el doble asterisco ** funcionaba de la siguiente forma:

/dir1/**/*.js -> /dir1/** // Es equivalente

Pero, de acuerdo con las notas de la revisión 1.8.2, en adelante el comportamiento se modificó. Cito textualmente:

The patterns in .gitignore and .gitattributes files can have **/, as a pattern that matches 0 or more levels of subdirectory. E.g. "foo/**/bar" matches "bar" in "foo" itself or in a subdirectory of "foo".

Que traducido viene a decir que se comporta como en el ejemplo que has puesto esperas que se comporte. Es decir:

/dir1/**/*.js

Coincidirá con los ficheros:

/dir1/script.js
/dir1/dir2/script.js

Simplemente comprueba que estás usando una versión superior o igual de de git a la 1.8.2

Estaba editando el .gitignore correctamente. El problema era que los archivos que quería excluir ya habían sido añadidos anteriormente al repositorio, y en ese caso, .gitignore no los ignora.

Efectivamente, los archivos que ya están en git no se eliminan automáticamente aunque se vean afectados por el . Gitignore, supongo que para evitar posibles catástrofes al borrar más cosas de las que realmente se tiene intención.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas