sirve - ¿Cómo funcionan los patrones negados en.gitignore?
gitignore no funciona (3)
Creo que lo que realmente quieres hacer es:
aaa/*
!aaa/ccc
Usted le dice "no mire en aaa
", por lo que nunca examina la ruta aaa/ccc
. Si usa el comodín, todavía lee el contenido de aaa
, luego cada entrada coincide con el comodín y se ignora, excepto aaa/ccc
que se vuelve a poner.
Estoy intentando utilizar un archivo .gitignore con patrones negados (¡líneas que comienzan con!), Pero no funciona de la manera que esperaba.
Como ejemplo mínimo, tengo la siguiente estructura de directorios:
C:/gittest
-- .gitignore
-- aaa/
-- bbb/
-- file.txt
-- ccc/
-- otherfile.txt
y en mi archivo de gitignore, tengo esto:
aaa/
!aaa/ccc/
Mi comprensión (basada en esta página de documento ) es que el archivo aaa / ccc / otherfile.txt no debe ignorarse, pero de hecho, git está ignorando todo lo que está debajo de aaa.
¿Estoy malinterpretando esta frase: "Un prefijo opcional que niega el patrón, cualquier archivo coincidente excluido por un patrón anterior se incluirá nuevamente".
Por cierto, esto está en Windows con msysgit 1.7.0.2.
Si alguien todavía no está viendo elementos nuevos no ignorados en un git status
ejecutando un git update-index
antes de la mano, puede ayudar a git a ver los cambios (al menos en la versión 1.9.x de gitbash).
Si desea excluir todo en aaa
, pero incluye aaa/ccc
y todo lo que está debajo, debe usar:
aaa/*
!aaa/ccc
!aaa/ccc/*
La primera línea le dice a git que ignore todo debajo de aaa
, el segundo le dice que no ignore la carpeta aaa/ccc
que realmente "activa" la tercera línea que luego le dice que no ignore todo debajo de aaa/ccc
.