Ignorieren eines beliebigen 'bin' Verzeichnisses in einem Git-Projekt

Ich habe eine Verzeichnisstruktur wie diese:

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

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

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

Kann mir jemand weiterhelfen? Das erste Muster (das, von dem ich denke, dass es funktionieren sollte) funktioniert einwandfrei, wenn ich dies tue:

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

Aber ich möchte nicht für jedes Top-Level-Verzeichnis einen Eintrag haben und ich möchte nicht jedes Mal, wenn ich ein neues Verzeichnis hinzufüge, .gitignore ändern müssen.

Dies geschieht unter Windows mit dem neuesten msysgit.

EDIT: noch eine Sache, es gibt Dateien und Verzeichnisse, die die Zeichenfolge 'bin' in ihren Namen haben, ich möchte nicht, dass diese ignoriert werden :)

Lösung

Vor Version 1.8.2 hatte ** keine besondere Bedeutung in der .gitignore. Seit Version 1.8.2 unterstützt Git die Bedeutung von ** für null oder mehr Unterverzeichnisse (siehe Release Notes).

Der Weg, alle Verzeichnisse mit dem Namen bin irgendwo unterhalb der aktuellen Ebene in einem Verzeichnisbaum zu ignorieren, ist mit einer .gitignore Datei mit dem Muster:

bin/

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

Edit: Wenn Sie bereits bin-Verzeichnisse in Ihrem Git-Index haben, die Sie nicht mehr verfolgen wollen, müssen Sie diese explizit entfernen. Git wird nicht aufhören, Pfade zu verfolgen, die bereits verfolgt werden, nur weil sie nun einem neuen .gitignore-Muster entsprechen. Führen Sie das Entfernen eines Ordners (rm) nur aus dem Index (--cached) und rekursiv (-r) aus. Kommandozeilenbeispiel für den Stammordner bin:

git rm -r --cached bin
Kommentare (9)

Die .gitignore deines Traums scheint zu sein:

bin/

auf der obersten Ebene.

Kommentare (4)

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

Kommentare (2)