¿Cómo se puede configurar git para ignorar files?

Git tiene algunos files que queremos ignorar, no rastrear, y tenemos problemas para descubrir cómo hacerlo.

Tenemos una biblioteca C terceros que está desempaquetada y la tenemos en Git. Pero cuando configure && make , produce muchos files nuevos. Cómo escribir .gitignore para rastrear files fuente y no las cosas nuevas. (no es como prohibir *.o )

Editar : hay al less 12 types de files. Entonces nos gustaría NO enumerar, qué tipo queremos y cuáles no.

Usar para include todos los types de files que necesita. Algo como en el siguiente ejemplo "

 * !*.c !*.h 

Especificar explícitamente qué files se deben rastrear e ignorar a todos los demás podría ser una solución. * dice ignorar todo y las líneas subsiguientes especifican files y directorys que no deben ignorarse. Comodines están permitidos

 * !filename !*.extension !directory/ !/file_in_root_directory !/directory_in_root_directory 

Recuerde que el order importa. Poner * al final hace que todas las líneas anteriores sean ineficaces.

¡Echa un vistazo a man gitignore (5) y busca ! . Dice

Los patrones tienen el siguiente formatting:

  • (…)

  • Un prefijo opcional ! que niega el patrón; cualquier file coincidente excluido por un patrón anterior se includeá nuevamente. Si un patrón negado coincide, esto anulará las fonts de patrones de precedencia inferiores.

No estoy seguro de por qué dices "no es como prohibir *.o ", pero creo que te refieres a que no hay buenos patrones que puedas identificar que se apliquen a los files generados pero no a los files fuente. Si solo aparecen algunas cosas (como los files ejecutables creados individualmente que a menudo no tienen ninguna extensión en Linux), puede nombrarlos explícitamente en .gitignore , para que no sean un problema.

Si realmente hay muchos y muchos files generados por el process de compilation que comparten extensiones y otros patrones con los files fuente, solo use patrones que incluyan sus files fuente. Incluso puede poner * en .gitignore si es realmente tan malo. Esto significará que no aparecerán nuevos files cuando ingrese el git status , o que se agreguen cuando use git add . , pero no daña los files que ya están agregados al repository; git aún le informará sobre los cambios en ellos, y los recibirá cuando use git add . . Simplemente le pone un poco más de carga para comenzar a rastrear de manera explícita los files que sí le importan.

Me aseguraría de que el repository esté limpio (sin cambios, sin files sin seguimiento), ejecute configure && make y luego coloque el file recientemente sin seguimiento en el file de ignorar. Algo así como el git status --porcelain | fgrep '??' | cut -c4- git status --porcelain | fgrep '??' | cut -c4- git status --porcelain | fgrep '??' | cut -c4- sacará automáticamente, pero valdría la pena echar un vistazo para asegurarse de que sea correcto …