2011-07-22 3 views
45

J'ai une structure similaire à ce qui suit:Git-ignorer certains fichiers dans des sous-répertoires, mais pas tous

/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 

Je voudrais git d'ignorer les .json fichiers sous le «/data/... 'chemin, mais'/data/'contient parfois des sous-répertoires.

Ma compréhension est que simple data/*.json en gitignore ne correspondra un répertoire, comme * ne correspond pas à /, comme indiqué à http://git-scm.com/docs/gitignore, "Format de modèle", point n ° 6:

Dans le cas contraire, git traite le motif comme un glob shell qui peut être utilisé par fnmatch (3) avec l'indicateur FNM_PATHNAME: les caractères génériques dans le motif ne correspondent pas à/dans le chemin d'accès. Par exemple, "Documentation/*. Html" correspond à "Documentation/git.html" mais pas "Documentation/ppc/ppc.html" ou "tools/perf/Documentation/perf.html".

Existe-t-il un moyen simple de le faire, ou dois-je ajouter activement des fichiers gitignore dans chaque sous-répertoire, explicitement?

+0

La plupart jusqu'à réponse jour est ici: http://stackoverflow.com/a/10714272/176877 –

Répondre

58

J'ai récemment écrit un post à propos de ce problème. Voir here.

Fondamentalement, ce dont vous avez besoin est de mettre un .gitignore avec *.json dans le répertoire /data/.

UPD: Depuis git 1.8.4 (1.8.2 si vous utilisez msysgit) il est possible d'utiliser des modèles à double étoile, comme /data/**/*.json

+0

J'ai ajouté le fichier '.gitignore', contenant' *. json', mais si je change un de ces fichiers, et que j'exécute 'git status', je les vois comme" Changements non mis en scène ". Les fichiers '.gitignore' doivent-ils être validés avant de prendre effet? Est-ce que cela apparaît parce que les fichiers ont déjà été suivis? –

+8

Les fichiers précédemment suivis seront suivis, peu importe ce qui est dans '.gitignore' –

+0

Got it. Merci! –

14

vous pouvez placer dans votre data/**/*.json.gitignore dans /root répertoire pour éviter que plusieurs .gitignore fichiers dans des répertoires différents

**/ - Autorise tout nombre de sous-répertoires (y compris le courant)

exemple: data/**/*.json enregistrement ignorera data/1.json, data/subfolder/2.json, data/../../3.json

+0

@CaptainBlammo Je l'utilise, ça marche, peut-être que vous avez fait quelque chose de mal? il y a des informations: [quelques docs] (http://git-scm.com/docs/gitignore) –

Questions connexes