2013-05-14 17 views
49

Ich versuche, das folgende Muster in meiner .gitignore Datei zu vermeiden.Wie zu .gitignore Dateien rekursiv

MyPrject/WebApp/Scripts/special/*.js 
MyPrject/WebApp/Scripts/special/*/*.js 
MyPrject/WebApp/Scripts/special/*/*/*.js 
MyPrject/WebApp/Scripts/special/*/*/*/*.js 
MyPrject/WebApp/Scripts/special/*/*/*/*/*.js 
MyPrject/WebApp/Scripts/special/*/*/*/*/*/*.js 
MyPrject/WebApp/Scripts/special/*/*/*/*/*/*/*.js 

Wir haben versucht:

MyPrject/WebApp/Scripts/special/**.js 
MyPrject/WebApp/Scripts/special/**/*.js 

Dies ist jedoch nicht funktionierte. Das ist git unter Windows. Gibt es einen prägnanteren Weg, dies zu tun, ohne die Dinge zu wiederholen?

+0

Mögliches Duplikat [Korrekt alle Dateien ignoriert rekursiv unter einem bestimmten Ordner außer für einen bestimmten Dateityp] (https://stackoverflow.com/ Fragen/17812717/Korrekt-Ignoriere-alle-Dateien-rekursiv-unter-einem-spezifischen-Ordner-ausgenommen-für-eine-Spezifikation – Sam

Antwort

49

Ab git 1.8.2, dies:

MyPrject/WebApp/Scripts/special/**/*.js 

Sollte nach this answer arbeiten. Es funktioniert auch für mich in Windows 7 mit Sourcetree 1.6.12.0 und die Version von git, die es installiert (1.8.4-preview20130916).

Um rekursiv alle Dateien und Ordner in ein Verzeichnis gitignore:

MyPrject/WebApp/Scripts/special/** 
+0

Was ist vor git 1.8? – ashes999

+1

Wenn diese Antwort nicht funktioniert (unter Windows), fügen Sie am Anfang das Zeichen '/' hinzu. Beispiel: '/ MyProject/WebApp/Scripts/special/**/*. Js' – batressc

+1

Es ist mir peinlich, dass meine Antwort immer Upvotes erhält, wenn es buchstäblich eine Verbindung zu * einer anderen * Antwort ist. – Sam

15

Nach gitignore manueller Seite:

[...] git behandelt das Muster als Schale glob geeignet für Verbrauch durch fnmatch (3) mit der FNM_PATHNAME Flag: Platzhalter in dem Muster nicht übereinstimmen a/im Pfadnamen.

So steht dies deutlich, dass es keine Möglichkeit gibt eine bestimmte Menge von Verzeichnissen zwischen zwei Strings zu spezifizieren, wie zwischen special und js. Dennoch

können Sie eine .gitignore Datei pro Verzeichnis haben, so vielleicht in Ihrem Fall die folgenden Inhalte

*.js 

an folgenden Orten

MyPrject/WebApp/Scripts/special/.gitignore 

ausreichend wäre?

+0

Ich hatte 'MyProject/WebApp/Scripts/special * .js' und es übereinstimmte 'MyProject/WebApp/Scripts/specialfile.js' sowie' MyProject/WebApp/Scripts/special/a/b/c/file.js'. Aus irgendeinem Grund hat sich das Verhalten geändert und meine aktuelle Problemumgehung besteht darin, Verzeichnisse einzeln aufzulisten. Ich benutze GitHub für Windows. – orad

+1

z.B. 'finde MyProject/WebApp/Scripts/special -type d -printf 'echo" * .js ">>% h/.gitignore \ n git add% h/.gitignore \ n' | sh' – jthill

Verwandte Themen