2017-04-05 1 views
1
$ git version 
git version 2.9.3.windows.1 

Je semble avoir des problèmes avec le + (un ou plusieurs) modificateur de modèle de .gitignore. Voici un test avec + et * utilisé comme qualificatif de modèle pour les chiffres incorporés dans le nom de fichier. Je veux conserver Test.txt dans le contrôle de source et ignorer les fichiers Test [0-9] + .txt.Le .gitignore de Git ne fonctionne pas avec un ou plusieurs qualificatifs d'astérisque +

Répertoire:

$ ll | grep Test 
-rw-r--r-- 1 asdf 1049089  0 Apr 5 15:55 Test.txt 
-rw-r--r-- 1 asdf 1049089  0 Apr 5 15:55 Test123.txt 
-rw-r--r-- 1 asdf 1049089  0 Apr 5 15:55 Test1235.txt 
-rw-r--r-- 1 asdf 1049089  0 Apr 5 15:55 Test124.txt 

Git ignorer le contenu du fichier de test 1:

Test[0-9]+.txt 

Test 1:

$ git status | grep Test 
    Test.txt 
    Test123.txt 
    Test1235.txt 
    Test124.txt 

Cela aurait filtré le 2 grâce à des fichiers 4ème.

Git ignorer le contenu du fichier de test 2:

Test[0-9]*.txt 

Test 2:

$ git status | grep Test 
    Test.txt 

Cela aurait filtré tous les fichiers.

Pourquoi cela se produit-il?

Répondre

1

Le fichier .gitignore utilise globbing, et non expressions régulières. Donc, en utilisant + est tout simplement pas valide.

Donc, votre deuxième tentative est en fait plus proche de ce que vous voulez.

Test*.txt 

Ceci élimine les fichiers commençant par Test et se terminant par .txt avec quoi que ce soit entre les deux. Mais il attraperait également Test.txt lui-même car un * dans glob peut être de largeur nulle.

Ce que vous avez peut-être l'option la plus simple.

Test[0-9]*.txt 

qui correspondent à Test suivi d'un chiffre, suivi de quoi que ce soit (y compris rien), suivi par .txt.

Il est imparfait, en ce sens qu'elle a également correspondre à

Test1foo.txt 

qui a le texte non-numérique passé le chiffre. Mais quelle est la spécificité de votre exigence? Vous pouvez aussi ajouter quelques modèles, comme

Test[0-9].txt 
Test[0-9][0-9].txt 
Test[0-9][0-9][0-9].txt 
Test[0-9][0-9][0-9][0-9].txt 
Test[0-9][0-9][0-9][0-9][0-9].txt 

Si vous avez vraiment être sûr que c'est tous les chiffres, puis juste choisir le nombre de chiffres, et utilisez plusieurs entrées comme ça pour en faire un match très spécifique.

2

.gitignore ne prend en charge que les modèles Glob et non les expressions régulières.

Voici ce que gitignore man page mentions:

Sinon, git treats the pattern as a shell glob suitable for consumption by fnmatch(3) avec le drapeau FNM_PATHNAME: jokers dans le modèle ne correspondra pas à un / dans le chemin. Par exemple, "Documentation/*.html" correspond à "Documentation/git.html" mais pas "Documentation/ppc/ppc.html" ou "tools/perf/Documentation/perf.html".

Pour plus d'informations, recherchez Glob Patterns vs Regex pour voir les différences.