2017-01-20 1 views
0

Y a-t-il des usages qui ne peuvent pas être remplacés par des équivalents sans astérisques?Est-ce que les astérisques "** /" sont redondants dans la syntaxe de correspondance de chemin .gitignore?

Two consecutive asterisks ("**") in patterns matched against full 
pathname may have special meaning: 

A leading "**" followed by a slash means match in all directories. 
For example, "**/foo" matches file or directory "foo" anywhere, 
the same as pattern "foo". "**/foo/bar" matches file or directory 
"bar" anywhere that is directly under directory "foo". 

A trailing "/**" matches everything inside. For example, "abc/**" 
matches all files inside directory "abc", relative to the location 
of the .gitignore file, with infinite depth. 

A slash followed by two consecutive asterisks then a slash matches 
zero or more directories. For example, "a/**/b" matches "a/b", 
"a/x/b", "a/x/y/b" and so on. 

Other consecutive asterisks are considered invalid. 

https://git-scm.com/docs/gitignore#_pattern_format

Permettez-moi de sortir, que je vous demande seulement grands astérisques/slash redondance. Étant donné que toute **/foo/bar peut être remplacé par un simple foo/bar

Par exemple, je suis ce qui suit dans mon dossier .gitignore:

# NuGet Packages 

# The packages folder can be ignored because of Package Restore 
**/packages/* 

# except build/, which is used as an MSBuild target. 
!**/packages/build/ 

# Uncomment if necessary however generally it will be regenerated when needed 
#!**/packages/repositories.config 

Et je me demande pourquoi ils ne pouvaient pas simplement écrire:

# NuGet Packages 

# The packages folder can be ignored because of Package Restore 
packages/* 

# except build/, which is used as an MSBuild target. 
!packages/build/ 

# Uncomment if necessary however generally it will be regenerated when needed 
#!packages/repositories.config 

https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

Répondre

1

bien non .. **/foo/bar correspondrait à plus de/foo/bar

=> le ** autorisera tout ou rien. sans les étoiles, rien n'est permis.

bien sûr, vous pouvez 'faire exploser le ** manuellement' et ajouter des règles supplémentaires ...


exemple:

/foo/bar => /foo/bar 

**/foo/bar => /foo/bar 
      => /x/foo/bar 
      => /x/y/foo/bar 
      => /x/foo/x/foo/bar 
+1

pire exemple que vous auriez pu choisir, car 'foo/bar' est identique à' **/foo/bar'. Mais tous les autres usages des astérisques ne peuvent pas être remplacés. ;-) – Vampire

+0

qui se soucie de 'foo/bar' - la question est le ** ... donc soit **/foo ou/foo .. :) mon exemple est correct alors;) –

+0

mais à part ça: * */foo/bar est identique à foo/bar? alors la réponse à la question est un oui et je me trompe –

0

Oui, la principale **/ combinaison est totalement obsolète et peut toujours Être laissé de côté. **/foo/bar est exactement le même que foo/bar (sans barre oblique). Peut-être ne l'ont-ils pas écrit en second parce qu'ils ne connaissaient pas la signification particulière d'un motif qui ne commence pas par une barre oblique, ou voulaient le rendre explicite, de sorte qu'un lecteur qui ne le fait pas Ne sais pas à propos de la syntaxe spéciale ne le confond pas en pensant qu'il ne fera que correspondre dans le répertoire racine. Mais que vous auriez à demander à l'auteur de ce fichier.