108 votes

Ce qui ' la différence entre Git en ignorant le répertoire et le répertoire / * ?

Je suis confus au sujet de ce qui est la bonne façon d'ignorer le contenu d'un répertoire dans le répertoire git.

Supposons que j'ai la structure de répertoire suivante:

my_project  
     |--www  
         |--1.txt  
         |--2.txt
     |--.gitignore

Quelle est la différence entre mettre ceci:

www

Et cela?

www/*

La raison qui me pousse à poser cette question, c'est: Dans git, si un répertoire est vide, git de ne pas inclure de telles répertoire vide dans le dépôt. J'essayais donc la solution est d'ajouter un supplément .gitkeep fichier sous le répertoire afin qu'il ne se vide pas. Quand j'ai essayé cette solution, si elle dans la .gitignore fichier, j'écris comme ci-dessous:

www
!*.gitkeep

Il ne fonctionne pas(Mon intention est de les ignorer tous les contenus sous www, mais de garder le répertoire). Mais si j'essaie suivantes:

www/* 
!*.gitkeep

Puis il travaille! Je pense donc qu'il doit avoir quelques différences entre les deux approches.

200voto

Landys Points 2034

Il y a des différences entre www, www/ et www/*.

L'essentiel de la documentation et de mes propres tests, www trouver une correspondance avec un fichier ou un répertoire, www/ seulement correspond à un répertoire, tandis que www/* correspond à des répertoires et des fichiers à l'intérieur d' www.

Je vais seulement de discuter sur les différences entre l' www/ et www/* ici, étant donné les différences entre www et www/ sont évidentes.

Pour www/, git ignore le répertoire www , ce qui signifie que git ne sera même pas regarder à l'intérieur. Mais pour l' www/*, git vérifie tous les fichiers/dossiers à l'intérieur d' www, et ignore tout d'eux avec le motif *. Il semble mener aux mêmes résultats depuis git de ne pas suivre un dossier vide www si tous ses enfants les fichiers/dossiers sont ignorés. Et en effet, les résultats seront pas de différence pour l'OP avec www/ ou www/* autonome. Mais il fait des différences si il est combiné avec d'autres règles.

Par exemple, si nous voulons seulement comprennent www/1.txt mais ignorer tous les autres à l'intérieur d' www?

La suite de .gitignore ne fonctionne pas.

www/
!www/1.txt

Tandis que le suivant .gitignore fonctionne, pourquoi?

www/*
!www/1.txt

Pour le premier, git ignore simplement le répertoire www, et ne sera même pas regarder à l'intérieur d'inclure www/1.txt de nouveau. La première règle exclut le répertoire parent www mais pas www/1.txt, et comme un résultat www/1.txt ne peut pas être "inclus de nouveau".

Mais pour ce dernier, git tout d'abord ignore tous les fichiers/folers en vertu de l' www, puis inclut un de nouveau qui est www/1.txt.

Pour cet exemple, les lignes suivantes dans la documentation peuvent aider:

Un préfixe facultatif "!" qui nie le motif; tout fichier de correspondance des exclus par un modèle précédent deviendra inclus de nouveau. Il n'est pas possible de ré-inclure un fichier si un répertoire parent du fichier est exclue.

8voto

djechlin Points 18051

Je suis juste l’analyse par le biais de la documentation, et que je peux dire qu’ils diffèrent seulement par des modèles plus avancés, par exemple

** J’ai tester ce qui précède, et si vous remplacez avec , vous obtenez un résultat différent en effet.

Remarque

Exclura tous les fichiers `` , mais

exclura uniquement les répertoires nommés foo.

3voto

Carlos Campderrós Points 6055

En dehors de la parfaite qualité des réponses que vous avez déjà obtenu, 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 d' www, mais whant l' www le dossier à un numéro de version, au lieu d'utiliser un vide .gitkeep, .dummy ou quel que soit le nom que vous choisissez, pourquoi ne pas utiliser un .gitignore il y, à dire d'ignorer tous les fichiers?

/
|- .gitignore   (a)
\- www
    |- .gitignore   (b)
    |- 1.jpg
    \- 2.jpg

Dans la racine .gitignore (a), vous ne dites rien sur l' www le dossier ou de son contenu.

Dans l' www/.gitignore (b) vous mettez le texte suivant:

# ignore all files in this folder except this .gitignore
*
!.gitignore

De cette façon, tout semble plus organisé (du moins pour moi).

1voto

Koen. Points 3570

D’ignorer tout dans un répertoire sauf dotfiles, vous pouvez utiliser le glob-modèle suivant dans votre `` :

Donc pas besoin d’un supplément , tout simplement ajouter un fichier vers votre `` répertoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X