Je ne sais pas quelle est la bonne façon d'ignorer le contenu d'un répertoire dans git.
Supposons que j'ai la structure de répertoires suivante:
my_project
|--www
|--1.txt
|--2.txt
|--.gitignore
Quelle est la différence entre mettre ceci:
www
Et ça?
www/*
La raison pour laquelle je pose cette question est la suivante: Dans git, si un répertoire est vide, git n'inclura pas ce répertoire vide dans le référentiel. J'essayais donc la solution qui consiste à ajouter un fichier .gitkeep supplémentaire sous le répertoire afin qu'il ne soit pas vide. Quand j'essayais cette solution, si dans le fichier .gitignore, j'écris comme ci-dessous:
www
!*.gitkeep
Cela ne fonctionne pas (mon intention est d'ignorer tout le contenu sous www mais de conserver le répertoire). Mais si j'essaye ce qui suit:
www/*
!*.gitkeep
Alors ça marche! Je pense donc qu'il doit y avoir des différences entre les deux approches.
bin
etbin/
est que le premier ignorera les fichiers ou les dossiers, le second uniquement les dossiers. Je ne connais pas la différence avecbin/*
Réponses:
Il sont les différences entre
www
,www/
etwww/*
.Fondamentalement à partir de la documentation et de mes propres tests,
www
trouvez une correspondance avec un fichier ou un répertoire,www/
ne correspond qu'à un répertoire, tandis quewww/*
correspond aux répertoires et aux fichiers à l'intérieurwww
.Je ne discuterai que des différences entre
www/
etwww/*
ici, car les différences entrewww
etwww/
sont évidentes.Car
www/
, git ignore le répertoirewww
lui-même, ce qui signifie que git ne regardera même pas à l'intérieur. Mais pourwww/*
, git vérifie tous les fichiers / dossiers à l'intérieurwww
, et les ignore tous avec le modèle*
. Cela semble conduire aux mêmes résultats puisque git ne suivra pas un dossier videwww
si tous ses fichiers / dossiers enfants sont ignorés. Et en effet, les résultats ne seront pas différents pour le cas d'OP avecwww/
ouwww/*
autonome. Mais cela fait des différences s'il est combiné avec d'autres règles.Par exemple, que faire si nous voulons seulement inclure
www/1.txt
mais ignorer tous les autres à l'intérieurwww
?Ce qui suit
.gitignore
ne fonctionnera pas.Alors que ce qui suit
.gitignore
fonctionne, pourquoi?Pour le premier, git ignore simplement le répertoire
www
et ne regardera même pas à l'intérieur pour l'inclure àwww/1.txt
nouveau. La première règle exclut le répertoire parentwww
mais paswww/1.txt
, et par conséquentwww/1.txt
ne peut pas être " inclus à nouveau ".Mais pour ce dernier, git ignore d'abord tous les fichiers / folers sous
www
, puis inclut à nouveau l'un d'entre eux qui estwww/1.txt
.Pour cet exemple, les lignes suivantes de la documentation peuvent aider:
la source
www/1.txt
et ensuitewww/
ferait la même chose que la deuxième approche ...Je suis juste en train d'analyser la documentation, et pour autant que je sache, ils ne diffèrent que par des modèles plus avancés, par exemple
Je l'ai fait tester ce qui précède, et si vous remplacez
!/foo
avec!/foo/*
, vous ne en effet obtenir un résultat différent.Remarque
Exclura tous les fichiers
foo
, maisexclura uniquement les répertoires nommés foo.
la source
Outre les réponses parfaitement bonnes que vous avez déjà obtenues, vous devez noter que vous pouvez avoir
.gitignore
n'importe où dans votre projet, y compris les sous-dossiers.Donc, si vous voulez ignorer tous les fichiers à l'intérieur
www
, mais que vous souhaitez que lewww
dossier soit versionné, au lieu d'utiliser un nom vide.gitkeep
,.dummy
ou quel que soit le nom que vous choisissez, pourquoi ne pas utiliser un.gitignore
là, en disant d'ignorer tous les fichiers?Dans la racine
.gitignore
(a), vous ne dites rien sur lewww
dossier ou son contenu.Dans le
www/.gitignore
(b) vous mettez ce qui suit:De cette façon, tout semble plus organisé (du moins pour moi).
la source
Pour ignorer tout ce qui se trouve dans un répertoire à l'exception des fichiers dot, vous pouvez utiliser le modèle global suivant dans votre
.gitignore
:Donc pas besoin de supplément
.gitignore
, ajoutez simplement un.keep
fichier dans votrewww
répertoire.la source