2009-08-14 16 views
123

Mis programas generalmente generan enormes archivos de salida (~ 1 GB) que no quiero respaldar en el repositorio de git. Así que en lugar de ser capaz de hacer¿Hay alguna manera de decirle a git que solo incluya ciertos archivos en lugar de ignorar ciertos archivos?

git add . 

tengo que hacer algo como

git add *.c *.cc *.f *.F *.C *.h *.cu 

que es un poco engorroso ...

me siento bastante seguro de que podía escribir Perl quicky script ls el contenido del directorio en .gitignore y luego elimina los archivos basados ​​en un archivo .gitinclude (o algún nombre similar), pero parece un poco demasiado hackish. ¿Hay una mejor manera?

Respuesta

159

No he tenido necesidad de probar esto por mí mismo, pero según mi lectura de TFM parece que un patrón negado haría lo que usted quisiera. Puede anular las entradas en .gitignore con entradas negadas posteriores. De este modo se podría hacer algo como:

*.c 
!frob_*.c 
!custom.c 

Tener que ignore todos los archivos .c excepto custom.c y cualquier cosa que empieza con "frob_"

+14

Gracias, TED Esto funcionó. Todo lo que tenía que hacer era iniciar el archivo .gitignore con * y luego enumerar todos los patrones de archivo incluidos precedidos por un signo de exclamación. –

+5

¿Qué tal las carpetas? No puedo encontrar una manera de incluir carpetas y archivos dentro al negar una regla. –

+1

Acerca de las carpetas, compruebe http://stackoverflow.com/questions/12799855/configure-git-to-track-only-one-file-extension – uzsolt

58

crear .gitignore archivo en el repositorio y quiere hacer un seguimiento únicamente c archivos y hacer caso omiso de todos los demás archivos a continuación, añadir las siguientes líneas a ella ....

* 
!*.c 

'*' ignorará todos los archivos

y! negará a archivos sean ignorados .... así que aquí estamos pidiendo git no ignorar los archivos c ....

+0

¿También necesita '. *' para los archivos ocultos? – trusktr

+1

El '*' es un comodín incluso para '.', por lo que los archivos ocultos también se ignoran, pero luego se incluyen todos los archivos ocultos que terminan en' .c'. – Rohmer

+2

Al usar este método, creo que los archivos de las subcarpetas también se ignoran. Verifique esto para obtener más detalles http://stackoverflow.com/a/11853075/739436 – popas

2

La mejor solución para conseguir este

crear .gitignore archivo en el repositorio root, y si desea incluir solamente .c archivo a continuación, es necesario agregar líneas a continuación .gitignore archivo

*.* 
!*.c 

esto incluirá todos los archivos .c del directorio y subdirectorio de forma recursiva.

usando

* 
!*.c 

no funciona en todas las versiones de Git.

probado en

versión git 2.12.2.windows.2

+0

Sí, tuve el mismo problema con '*' y tuve que usar '*. *'. Esto está en Windows usando gitbash y git versión 2.9.0.windows.1 –

0

utilizar esto en gitignore

*.* 
!*.c 

probado con la versión git 2.7.4

Cuestiones relacionadas