Pregunta Haga que .gitignore ignore todo, excepto algunos archivos


Entiendo que un archivo .gitignore oculta los archivos especificados de la versión de Git controlar. Tengo un proyecto (LaTeX) que genera muchos archivos adicionales (.auth, .dvi, .pdf, logs, etc.) mientras se ejecuta, pero no quiero que se rastreen.

Soy consciente de que podría (tal vez debería) hacerlo para que todos esos archivos se pongan en una subcarpeta separada en el proyecto, ya que podría simplemente ignorar la carpeta.

Sin embargo, ¿hay alguna manera factible de mantener los archivos de salida en la raíz del árbol de proyectos y use .gitignore para ignorar todo excepto los archivos que estoy siguiendo con Git? Algo como

# Ignore everything
*

# But not these files...
script.pl
template.latex
# etc...

1168
2018-06-12 15:04


origen


Respuestas:


Un prefijo opcional ! que niega el patrón; cualquier archivo coincidente excluido por   un patrón anterior se incluirá nuevamente. Si un patrón negado coincide,   esto anulará las fuentes de patrones de precedencia baja.

# Ignore everything
*

# But not these files...
!.gitignore
!script.pl
!template.latex
# etc...

# ...even if they are in subdirectories
!*/

# if the files to be tracked are in subdirectories
!*/a/b/file1.txt
!*/a/b/c/*

1702
2018-06-12 15:07



Si desea ignorar todo el contenido de un directorio, excepto un archivo dentro de él, puede escribir un par de reglas para cada directorio en la ruta del archivo. Eg .gitignore para ignorar la carpeta pippo excepto de pippo / pluto / paperino.xml

.gitignore

pippo/*
!pippo/pluto
pippo/pluto/*
!pippo/pluto/paperino.xml

486
2018-05-01 12:31



Quieres usar /* en lugar de * o */ en la mayoría de los casos

Utilizando * es válido, pero funciona recursivamente No buscará directorios de allí en adelante. La gente recomienda usar !*/ volver a incluir en la lista los directorios, pero en realidad es mejor incluir en la lista negra la carpeta del nivel más alto /*

# Blacklist files/folders in same directory as the .gitignore file
/*

# Whitelist some files
!.gitignore
!README.md

# Ignore all files named .DS_Store or ending with .log
**/.DS_Store
**.log

# Whitelist folder/a/b1/ and folder/a/b2/
# trailing "/" is optional for folders, may match file though.
# "/" is NOT optional when followed by a *
!folder/
folder/*
!folder/a/
folder/a/*
!folder/a/b1/
!folder/a/b2/

El código anterior ignoraría todos los archivos a excepción de .gitignore, README.md, folder/a/b1/ y folder/a/b2/ y todo lo contenido en esas dos carpetas. (Y .DS_Store y *.log los archivos se ignorarían en esas carpetas).

Obviamente, podría hacerlo, p. !/folder o !/.gitignore también.

Más información: http://git-scm.com/docs/gitignore


139
2018-04-29 00:31



Un poco más específico:

Ejemplo: Ignorar todo en webroot/cache - pero mantén webroot/cache/.htaccess.

Observe la barra inclinada (/) después del cache carpeta:

NO FALLA

webroot/cache*
!webroot/cache/.htaccess

TRABAJOS

webroot/cache/*
!webroot/cache/.htaccess

57
2017-08-13 13:23



# ignore these
*
# except foo
!foo

49
2018-06-12 15:06



Para ignorar algunos archivos en un directorio, debe hacer esto en orden correcto:

Por ejemplo, ignore todo en la carpeta "aplicación" excepto index.php y carpeta "config" presta atención a la orden.

Debes negar lo que quieres primero.

NO FALLA

application/*

!application/config/*

!application/index.php

TRABAJOS

!application/config/*

!application/index.php

application/*


23
2017-08-09 08:39



Puedes usar git config status.showUntrackedFiles no y todos los archivos sin seguimiento se ocultarán de usted. Ver man git-config para detalles.


18
2018-06-12 15:20



Para excluir la carpeta de .gitignore, se puede hacer lo siguiente.

!app/

app/*
!app/bower_components/

app/bower_components/*
!app/bower_components/highcharts/

Esto ignorará todos los archivos / subcarpetas dentro bower_components excepto por /highcharts.


12
2017-11-10 14:21



Hay un montón de preguntas similares sobre esto, así que publicaré lo que escribí antes:

La única forma en que hice que esto funcionara en mi máquina fue hacerlo de esta manera:

# Ignore all directories, and all sub-directories, and it's contents:
*/*

#Now ignore all files in the current directory 
#(This fails to ignore files without a ".", for example 
#'file.txt' works, but 
#'file' doesn't):
*.*

#Only Include these specific directories and subdirectories and files if you wish:
!wordpress/somefile.jpg
!wordpress/
!wordpress/*/
!wordpress/*/wp-content/
!wordpress/*/wp-content/themes/
!wordpress/*/wp-content/themes/*
!wordpress/*/wp-content/themes/*/*
!wordpress/*/wp-content/themes/*/*/*
!wordpress/*/wp-content/themes/*/*/*/*
!wordpress/*/wp-content/themes/*/*/*/*/*

Observe cómo debe permitir explícitamente el contenido para cada nivel que desee incluir. Entonces, si tengo subdirectorios 5 muy por debajo de los temas, aún necesito deletrear eso.

Esto es del comentario de @ Yarin aquí: https://stackoverflow.com/a/5250314/1696153

Estos fueron temas útiles:

También intenté

*
*/*
**/**

y **/wp-content/themes/**

o /wp-content/themes/**/*

Nada de eso funcionó para mí, tampoco. ¡Un montón de rastro y error!


9
2018-04-29 23:40