2011-07-22 10 views
45

tengo una estructura similar a la siguiente:Git-ignore ciertos archivos en subdirectorios, pero no todos

/root/ 
/root/data/ 
/root/data/script.php 
/root/data/some.json 
/root/data/feature/one.json 
/root/data/feature/two.json 
/root/data/other-feature/one.json 
/root/data/other-feature/important-script.php 

me gustaría git para ignorar cualquier .json archivos bajo el '/ datos/... 'ruta, pero'/data/'a veces contiene subdirectorios.

Mi entendimiento es que un simple data/*.json en gitignore sólo igualará un directorio, como el * no coincide con /, como se indica en http://git-scm.com/docs/gitignore, "Formato de patrones", bala # 6:

De lo contrario, git trata el patrón como un comodín de shell adecuado para el consumo por fnmatch (3) con el indicador FNM_PATHNAME: los comodines en el patrón no coincidirán con a/en el nombre de ruta. Por ejemplo, "Documentation/*. Html" coincide con "Documentation/git.html" pero no con "Documentation/ppc/ppc.html" o "tools/perf/Documentation/perf.html".

¿Hay una manera simple de hacer esto, o tengo que agregar activamente archivos de gitignore en cada subdirectorio, explícitamente?

+0

mayoría hasta la fecha es la respuesta aquí: http://stackoverflow.com/a/10714272/176877 –

Respuesta

58

He escrito una publicación sobre este problema recientemente. Ver here.

Básicamente lo que necesita es poner uno .gitignore con *.json en el directorio /data/.

UPD: Desde git 1.8.4 (1.8.2 si está usando msysgit) es posible usar patrones de estrellas dobles, como /data/**/*.json

+0

añadí el archivo '.gitignore', que contiene' *. json', pero si cambio uno de esos archivos y ejecuto 'git status', los veo listados como" Cambios no escalonados ". ¿Los archivos '.gitignore' necesitan confirmarse antes de entrar en vigencia? ¿Está apareciendo porque los archivos fueron rastreados previamente? –

+8

Los archivos rastreados previamente se rastrearán sin importar lo que esté en '.gitignore' –

+0

Entendido. ¡Gracias! –

14

puede colocar en su data/**/*.json.gitignore en /root directorio para prevenir múltiples .gitignore archivos en directorios diferentes

**/ - coincide con cualquier número de subdirectorios (incluyendo actual)

ejemplo: data/**/*.json registro ignorará data/1.json, data/subfolder/2.json, data/../../3.json

+0

@CaptainBlammo Lo estoy usando, funciona, ¿puede ser que hayas hecho algo mal? hay información: [algunos documentos] (http://git-scm.com/docs/gitignore) –

Cuestiones relacionadas