web-dev-qa-db-de.com

ignorieren eines 'bin'-Verzeichnisses in einem Git-Projekt

Ich habe eine Verzeichnisstruktur wie folgt:

.git/
.gitignore
main/
  ...
tools/
  ...
...

Innerhalb von main und tools und in jedem anderen Verzeichnis kann auf jeder Ebene ein 'bin'-Verzeichnis vorhanden sein, das ich ignorieren möchte (und ich möchte auch alles darunter ignorieren). Ich habe jedes dieser Muster in .gitignore ausprobiert, aber keines davon funktioniert:

/**/bin/**/*
/./**/bin/**/*
./**/bin/**/*
**/bin/**/*
*/bin/**/*
bin/**/*
/**/bin/* #and the others with just * at the end too

Kann mir jemand helfen? Das erste Muster (das meiner Meinung nach funktionieren sollte) funktioniert gut, wenn ich das mache:

/main/**/bin/**/*

Ich möchte jedoch nicht für jedes Verzeichnis der obersten Ebene einen Eintrag haben, und ich möchte .gitignore nicht jedes Mal ändern, wenn ich ein neues hinzufüge.

Dies ist unter Windows das neueste msysgit.

EDIT: Eine weitere Sache, es gibt Dateien und Verzeichnisse, in deren Namen die Teilzeichenfolge 'bin' steht. Ich möchte nicht, dass diese ignoriert werden :)

1058
Ben Hymers

Vor Version 1.8.2 hatte ** keine besondere Bedeutung im .gitignore. Git unterstützt ** ab 1.8.2 für null oder mehr Unterverzeichnisse (siehe Versionshinweise ).

Um alle Verzeichnisse, die als bin bezeichnet werden, irgendwo unterhalb der aktuellen Ebene in einer Verzeichnisstruktur zu ignorieren, können Sie eine .gitignore-Datei mit dem Muster verwenden:

bin/

Auf der Seite man gibt es ein Beispiel für das Ignorieren eines Verzeichnisses mit dem Namen foo unter Verwendung eines analogen Musters.

Edit: Wenn Sie bereits Bin-Ordner in Ihrem Git-Index haben, die Sie nicht mehr verfolgen möchten, müssen Sie diese explizit entfernen. Git wird die Verfolgung von Pfaden, die bereits verfolgt werden, nicht stoppen, nur weil sie jetzt mit einem neuen .gitignore-Muster übereinstimmen. Führen Sie einen Ordner aus (rm), der nur aus dem Index (--cached) wiederhergestellt wird (-r). Befehlszeilenbeispiel für den Stammordner:

git rm -r --cached bin
1590
CB Bailey

Der .gitignore Ihres Traums scheint zu sein:

bin/

auf der obersten ebene.

Ich denke, es ist wert für Git-Anfänger zu erwähnen:

Wenn Sie bereits eine Datei eingecheckt haben und diese ignorieren möchten, Git ignoriert die Datei nicht, wenn Sie später eine Regel hinzufügen. In diesen Fällen haben Sie Sie müssen die Datei zuerst aufheben, indem Sie den folgenden Befehl in Ihrer .__ ausführen. Terminal:

git rm --cached

Wenn Sie also hinzufügen möchten, um einige Verzeichnisse in Ihrem lokalen Repository zu ignorieren (die bereits vorhanden sind), nachdem Sie .gitignore bearbeitet haben, möchten Sie dies in Ihrem Stammverzeichnis ausführen

git rm --cached -r .
git add .

Es wird im Wesentlichen Ihr lokales Repo "aktualisieren" und die ignorierten Dateien entpacken. 

Sehen:

http://git-scm.com/docs/git-rm ,

https://help.github.com/articles/ignoring-files/

192
plancys

Der ** hat vorher nie richtig funktioniert, aber seit git 1.8.2 (8. März 2013) scheint es ausdrücklich erwähnt und unterstützt zu werden:

Die Muster in .gitignore und .gitattributes-Dateien können **/ als Muster haben, das mit mindestens 0 Ebenen des Unterverzeichnisses übereinstimmt.

Z.B. "foo/**/bar" stimmt mit "bar" in "foo" selbst oder in einem Unterverzeichnis von "foo" überein.

In Ihrem Fall bedeutet dies, dass diese Zeile jetzt unterstützt wird:

/main/**/bin/
69
VonC
[Bb]in/

passt sowohl Groß- als auch Kleinbuchstaben

45
wisbucky

Ich habe es hier nicht erwähnt, aber es scheint Groß- und Kleinschreibung zu sein. Sobald ich zu/Bin gewechselt habe, wurden die Dateien wie erwartet ignoriert.

31
Cory

[Bb]in löst das Problem, aber ... .__ Hier eine umfangreichere Liste von Dingen, die Sie ignorieren sollten (Beispielliste von GitExtension):

#ignore thumbnails created by windows
Thumbs.db
#Ignore files build by Visual Studio
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.bak
*.cache
*.ilk
*.log
[Bb]in
[Dd]ebug*/
*.sbr
obj/
[Rr]elease*/
_ReSharper*/
24
Jaider

Wenn Sie nach einer hervorragenden globalen .gitignore-Datei für eine beliebige Visual Studio (.NET) -Lösung suchen, empfehle ich die Verwendung dieser: https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

AFAIK hat den umfassendsten .gitignore für .NET-Projekte.

17

Schritt 1: Fügen Sie folgenden Inhalt zur Datei .gitignore hinzu.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/

# Visual Studio 2015 cache/options directory
.vs/

Schritt 2: Stellen Sie sicher, dass Sie wirksam werden

Wenn das Problem weiterhin besteht, liegt das daran, dass die Einstellungen in . Gitignore nur Dateien ignorieren können, die ursprünglich nicht verfolgt wurden . Wenn einige Dateien bereits im Versionskontrollsystem enthalten sind, ist das Ändern . Gitignore ungültig. Um dieses Problem vollständig zu lösen, müssen Sie die Git Bash oder Package Manager Console öffnen. -) (siehe Abbildung unten), um die folgenden Befehle im Repository-Stammordner auszuführen.

$ git rm -r --cached .
$ git add .
$ git commit -m 'Update .gitignore'

PM console Dann ist das Problem vollständig gelöst.

15
Bravo Yeung

Als Bekanntmachung;

Wenn Sie daran denken, dass .gitignore nicht in einer Weise funktioniert (also foo/*-Ordner hinzugefügt wurde, aber git status den Ordnerinhalt immer noch als geändert anzeigt oder so), können Sie diesen Befehl verwenden.

git checkout -- foo/*

5
K-Gun

wenn Sie nur bin in Ihre .gitignore-Datei schreiben, sollten Sie ab 2.13.3 die bin und alle ihre Unterverzeichnisse und Dateien ignorieren 

Behälter

3

Wörtlich funktionierte keine der Antworten tatsächlich für mich; Der einzige, der für mich funktionierte, war (unter Linux):

**/bin
(yes without the / in the end)

git version 2.18.0 
2
AnthonyC

Wenn das Muster in .gitignore mit einem Schrägstrich / endet, findet es nur eine Übereinstimmung mit einem Verzeichnis.

Mit anderen Worten, bin/ stimmt mit einem Verzeichnis bin und Pfaden darunter überein, stimmt jedoch nicht mit einer regulären Datei oder einem symbolischen Link bin überein.


Wenn das Muster keinen Schrägstrich enthält, behandelt Git es wie in bin als Shell-Glob-Muster (gierig). Am besten wäre es also, einfachen /bin zu verwenden.

bin wäre nicht die beste Lösung für dieses spezielle Problem.

0
prosti

Das Hinzufügen von **/bin/zur .gitignore-Datei hat den Trick für mich bewirkt (Hinweis: Der Ordner bin nicht zum Index hinzugefügt).

0
Dhwaneel