2010-05-12 18 views
59

Estoy intentando utilizar un archivo .gitignore con patrones negados (¡líneas que comienzan con!), Pero no está funcionando como esperaba.¿Cómo funcionan los patrones negados en .gitignore?

Como un ejemplo mínimo, tengo la estructura de directorios siguientes iniciales:

C:/gittest 
-- .gitignore 
-- aaa/ 
    -- bbb/ 
    -- file.txt 
    -- ccc/ 
    -- otherfile.txt 

y en mi archivo gitignore, tengo esto:

aaa/ 
!aaa/ccc/ 

Mi entendimiento (basado en this doc page) es que el No se debe ignorar el archivo aaa/ccc/otherfile.txt, pero de hecho, git está ignorando todo bajo aaa.

¿Entiendo mal esta oración: "Un prefijo opcional que niega el patrón, cualquier archivo coincidente excluido por un patrón anterior se volverá a incluir".

Por cierto, esto está en Windows con msysgit 1.7.0.2.

Respuesta

104

creo que lo que realmente quiere hacer es:

aaa/* 
!aaa/ccc 

Usted está diciendo que "no se ven en aaa" por lo que ni siquiera se examina la trayectoria aaa/ccc. Si utiliza el comodín, que todavía se puede leer el contenido de aaa, a continuación, cada entrada coincide con el comodín y se ignora, excepto aaa/ccc que consigue poner de nuevo en.

+2

que no funcionó para mí .... – iconoclast

+2

@iconoclast: Entonces probablemente estés haciendo algo diferente. Publique otra pregunta (con información completa) si desea ayuda. – Cascabel

+0

Esto tampoco funcionó para mí: /apps/* !/Apps/myApps/FluidTest/bin/ –

10

Si desea excluir todo en aaa, pero incluyen aaa/ccc y todo debajo de ella, se debe utilizar:

aaa/* 
!aaa/ccc 
!aaa/ccc/* 

la primera línea le dice a Git que ignore Everthing debajo aaa, la segunda dice que no hacer caso de la carpeta aaa/ccc que en realidad "permite" la tercera línea, que le dice que no ignorar todo debajo de aaa/ccc.

+1

La tercera línea no hizo diferencia para mí. –

+1

Para poder incluir todo en cualquier subdirectorio de 'aaa/ccc' en cualquier nivel, lo que funcionó para mí fue'! Aaa/ccc/** 'en lugar de'! Aaa/ccc/* ' – boclodoa

1

Si alguien todavía no ve elementos recientemente ignorados en un git status ejecutando un git update-index de antemano puede ayudar a git a ver los cambios (al menos en la versión 1.9.x de gitbash).

Cuestiones relacionadas