2011-10-08 2 views
2

J'ai un dépôt git, et je veux que git status ignore tous les répertoires (et tout ce qui est ci-dessous) si je n'ai pas encore ajouté de fichiers dans le répertoire. Ajouter /* à .gitignore fait presque l'affaire. Je peux créer de nouveaux répertoires, y mettre des fichiers, et git status sera complètement inconscient. Alors, je crée un nouveau répertoire et y mets un fichier "répertoire/fichier". Ensuite, je git add directory, git commit, et créer un nouveau fichier dans ce répertoire, disons, "répertoire/nouveau fichier". Le problème est que git status ne me montrera pas le nouveau fichier.Git: Ignorer les répertoires uniquement s'ils n'ont pas de fichiers suivis

J'ai essayé d'ajouter !/*/* à .gitignore mais cela n'a rien fait pour autant que je sache. Comment puis-je obtenir git status pour afficher les nouveaux fichiers dans les répertoires avec le fichier qui est suivi (ajouté), tout en ignorant les répertoires sans les fichiers suivis?

Répondre

2

Les autres réponses parlent de git ne pas suivre les répertoires, ce qui est correct, mais ne répond pas à la question. Tout d'abord, /* non seulement ignore les répertoires et leur contenu, mais aussi les fichiers à la racine de votre repo. Il ignore tout. Je ne suis pas sûr que ce soit ce que tu veux. Essayez de le changer /*/ sinon.

Deuxièmement, git add directory n'aurait pas fonctionné avec le motif ignoré. git add aurait échoué en disant que le chemin est ignoré et que vous devez utiliser -f. Et oui, le répertoire (et son contenu) peut être ajouté avec un git add -f directory seulement.

Maintenant, que vous avez ajouté et validé le répertoire, lorsque vous y mettez un nouveau fichier, l'état git ne vous le montrera pas parce que, bien sûr, il est ignoré. Git n'interviendra pas dans le répertoire pour rechercher les fichiers non suivis. Mais, bien sûr, les modifications apportées aux fichiers déjà suivis viendront en statut git. En outre, git add directory/newfile échouera avec le même message sur l'utilisation de -f. Par conséquent, chaque fois que vous ajoutez un répertoire, vous devez explicitement ignorer ce répertoire particulier. Donc, vous devrez ajouter quelque chose comme !/directory à votre .gitignore.

+0

Un hook de validation peut-il être utilisé pour ajouter automatiquement '!/Directory' à' .gitignore'? –

+0

@JonasHeidelberg - Oui, peut-être. On peut jouer avec 'git diff --cached --name-only --diff-filter = A' et ajouter le répertoire pour l'ignorer de .gitignore je suppose. – manojlds

+0

Merci d'être si instructif et utile! J'essaie de mettre en place un système de fichiers de points. Cette approche pourrait cependant poser un peu trop de problèmes. :-P Je vais probablement utiliser un système basé sur [akefile] [RM]. –

0

Git ne stocke pas les répertoires eux-mêmes. Le chemin du fichier est un attribut des données du nœud, s'il n'y a pas de fichier, il n'y a pas de nœud. git add directory ne devrait avoir aucun effet dans tous les cas, si 'répertoire' est vide. git status afficherait le fichier nouvellement créé comme non suivi, sauf que vous l'avez ignoré. Essayez git add directory/newfilename, je ne suis pas sûr si .gitignore bloque les ajouts explicites, mais je ne pense pas que ce soit le cas. Si c'est le cas, vous devrez changer .gitignore pour autoriser ce répertoire (il y a beaucoup d'informations sur la syntaxe en ligne).

0

Git ne peut pas effectuer le suivi des répertoires. Il ne stockera pas les répertoires vides, c'est pourquoi vous trouverez souvent des fichiers nommés ".keep" dans les projets qui veulent avoir des dossiers "vides".

Questions connexes