2010-02-24 14 views
16

Je rencontre un problème étrange avec .gitignore sur Windows..gitignore ne comprend pas mon dossier joker sur windows

Je veux que git ignore tous les fichiers .exe, à l'exception de ceux du dossier Dependencies (et tous les sous-dossiers).

J'ai donc:

.gitignore:

*.exe 
!/Dependencies/**/*.exe 

Cela, malheureusement, ne fonctionne pas.

Pendant ce temps, cela ne:

*.exe 
!/Dependencies/folder/subfolder/*.exe 

Je me demande, je suis de déconner quelque chose, ou est-ce une sorte de bug?

Je suis en cours d'exécution msysgit sous Windows (Windows 7 x64) Version 1.6.5.1-preview20091022

Merci à l'avance pour toute entrée :)

+2

C'est effectivement la même question/malentendu http://stackoverflow.com/questions/1470572/ –

Répondre

14

Depuis git 1.8.2 (March, 8th 2013), le ** est maintenant pris en charge:

Les modèles dans .gitignore et .gitattributes fichiers peuvent avoir **/, comme un modèle qui correspond à 0 ou plusieurs niveaux de sous-répertoire.

E.g. "foo/**/bar" correspond "bar" dans "foo" lui-même ou dans un sous-répertoire de "foo".

Dans votre cas, cela signifie que cette ligne pourrait désormais être pris en charge:

!/Dependencies/**/*.exe 
+0

Génial, merci Von pour le suivi. –

+0

Pour la postérité, jdigital l'avait aussi bien fait; c'était un problème avec Windows impl de fnmatch, qui a maintenant été corrigé. –

2

Le .gitignore documentation dit:

traite git le motif en tant que glob shell peut être utilisé par fnmatch (3) avec le drapeau FNM_PATHNAME

Il est possible à fnmatch sur votre plate-forme ne supporte pas ** dans un chemin.

+0

@jdigital Cette C'est ce que je soupçonnais (craint, vraiment) aussi. Si tel est le cas, alors il pourrait potentiellement détruire le ravage dans les repos multi-plateforme :( –

2

Vous pouvez ajouter un fichier .gitignore dans le dossier Dependencies avec

* .exe

à l'intérieur. L'inconvénient évident est que les spécifications ignorées sont dispersées dans plusieurs fichiers maintenant.

+2

Pourquoi cette réponse a été acceptée et upvoted? La question était comment ignorer les fichiers ** .exe ** sauf ** pour ceux à l'intérieur de 'Dependencies/'. –