2010-09-08 8 views
8

WinXP + mysisGit1.7git ignorar excepción que no funciona como se desea

En mi archivo .gitignore, pero todavía no puede ver Demos/path/to/file/file.cpp ser rastreado por git.

tengo debajo de las entradas:

Demos/ 
!Demos/path/to/file/file.cpp 

La ruta absoluta es: c:\Project\Demos\path\to\file\file.cpp

¿Qué podría estar mal? Por favor ayuda, gracias.


EDIT:

he encontrado la manera cómo el trabajo .gitignore mysisGit en Windows XP sólo puede ignorar cierto tipo de archivo, a continuación, excluir algunos archivos con el mismo tipo. Por ejemplo:

*.bak 
!tracking.bak 
!/path/to/file/tracking2.bak 

No funciona ignorar la carpeta y excluir algunos archivos de esa carpeta. A continuación, no funcionará:

/folderUnderRepoRoot/ 
!/folderUnderRepoRoot/tracking.cpp 

Tampoco

anyFolderNamedLikeThis/ 
!anyFolderNamedLikeThis/tracking.cpp 
!/anyFolderNamedLikeThis/tracking.cpp 

Sin embargo, encuentro que hay una excepción. Existe una forma práctica de excluir archivos justo debajo de la carpeta ignorada (no a su subcarpeta). Esto funciona.

/folderUnderRepoRoot/* 
/folderUnderRepoRoot/tracking.cpp 

Pero de esta manera está limitado sólo cuando el archivo no se encuentra en ninguna subcarpeta, por lo que no es tan útil.

Por lo tanto, termino cometiendo la mayoría de los archivos fuente, aunque solo estaba interesado en algunos archivos mientras rastreaba otros proyectos grandes. Lo que significa que hay un montón de archivos que no tocaré, pero aún así debo enviarlos.

Aquí está another thread que tuvo un problema similar.

+0

¿Te ha 'git add Demos/ruta/a/file/file.cpp' para comenzar a rastrearlo? – ewall

+0

Probado, pero no hubo suerte. – Stan

+0

@Stan: encontraste una solución? Encontré el mismo problema en git y ubuntu así que no está relacionado con la plataforma –

Respuesta

0

¿Puede intentar reemplazarlo con !/Demos/path/to/file/file.cpp (observe la barra diagonal después del signo de exclamación) y vuelva a intentarlo?

+0

esto no funciona. Gracias sin embargo. – Stan

1

se suman a .gitignore de la siguiente manera:

folderUnderRepoRoot/**/* 
!folderUnderRepoRoot/tracking.cpp 

pero asegúrese de que al menos un archivo de uno añadirlo al índice de Git desde la carpeta folderUnderRepoRoot.

7

Su excepción .gitignore no funciona porque "No es posible volver a incluir un archivo si se excluye un directorio principal de ese archivo" [source].

Como una solución fea, pero de trabajo, hacer esto en cada nivel de directorio en la ruta de acceso al archivo:

  1. excluir a todos los contenidos del directorio
  2. volver a incluir el subdirectorio que lleva a su archivo (o finalmente, su archivo).

Sus entradas se vería así, con cada sección de dos líneas de ejecutar estos pasos para un nivel de la jerarquía de directorios:

Demos/** 
!Demos/path/ 

Demos/path/** 
!Demos/path/to/ 

Demos/path/to/** 
!Demos/path/to/file/ 

Demos/path/to/file/** 
!Demos/path/to/file/file.cpp 

Por lo tanto, NO arranque mediante la exclusión de Demos/ como la pregunta el autor lo hizo. Es un directorio padre de nuestro archivo, por lo que tendrías que volver a incluirlo luego. En su lugar, comience por excluir su contenido : Demos/**.

0

Si se trata de un solo archivo, que normalmente no modificar .gitignore

Lo que sigue debe ignorar .gitignore y permitirá añadir el archivo

git add -f Demos/path/to/file/file.cpp