1477 Stimmen

Ignorieren Sie ein "bin"-Verzeichnis in einem Git-Projekt.

Ich habe eine Verzeichnisstruktur wie diese:

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

In 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 jede dieser Muster in .gitignore ausprobiert, aber keines funktioniert:

/**/bin/**/*
/./**/bin/**/*
./**/bin/**/*
**/bin/**/*
*/bin/**/*
bin/**/*
/**/bin/* #und die anderen auch mit nur * am Ende

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

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

Aber ich möchte keinen Eintrag für jedes Top-Level-Verzeichnis haben und ich möchte nicht jedes Mal .gitignore ändern müssen, wenn ich ein neues hinzufüge. Es gibt auch Dateien und Verzeichnisse, die den Teil "bin" in ihren Namen haben, die ich behalten möchte.

Dies ist auf Windows mit dem neuesten msysgit.

22 Stimmen

Vermutlich wird es für jemanden hilfreich sein: Wenn Sie nur wenige Repositories haben und jedes dieselbe .gitignore-Datei hat, können Sie sie an einem "gemeinsamen" Ort platzieren und dann > git config --global core.excludesfile ~/.gitignore_global ausführen. Der letzte Parameter ist der Pfad zum gemeinsamen Ort. P.S. Ich bin neu bei git und bin mir nicht sicher, ob das eine 'Best Practice'-Empfehlung ist. Bitte lassen Sie mich wissen, falls Sie das nicht tun möchten. Vielen Dank.

0 Stimmen

Die **-Syntax scheint jetzt (März 2013, git 1.8.2) offiziell dokumentiert zu sein: siehe meine Antwort unten

3 Stimmen

Wenn jemand die aktuellste Version der tatsächlichen Handbuchseite lesen möchte, siehe gitignore(5) Handbuchseite.

7voto

Für Version 2.13.3 und höher, wenn Sie einfach "bin" in Ihrer .gitignore-Datei schreiben, wird der Ordner "bin" und alle seine Unterordner und Dateien ignoriert.

bin

5voto

K-Gun Punkte 10609

Als Hinweis;

Wenn Sie denken, dass .gitignore nicht funktioniert (also foo/* Ordner hinzugefügt haben, aber git status immer noch den Inhalt dieses Ordners als verändert oder ähnliches anzeigt), können Sie diesen Befehl verwenden;

git checkout -- foo/*

4voto

Dhwaneel Punkte 501

Das Hinzufügen von **/bin/ zur .gitignore-Datei hat bei mir funktioniert (Hinweis: Der bin-Ordner wurde nicht in den Index aufgenommen).

2voto

prosti Punkte 34344

Wenn das Muster innerhalb von .gitignore mit einem Schrägstrich / endet, wird es nur mit einem Verzeichnis übereinstimmen.

Anders ausgedrückt wird bin/ mit einem Verzeichnis bin und den darunterliegenden Pfaden übereinstimmen, aber nicht mit einer regulären Datei oder einem symbolischen Link bin.


Wenn das Muster keinen Schrägstrich enthält, wie zum Beispiel bin, behandelt Git es als Shell-Glob-Muster (greedy). Es wäre also am besten, einfach /bin zu verwenden.

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

0 Stimmen

Meintest du 'beginnen mit' einem /?

2voto

Norman Punkte 2989

Zusätzlich zu @CB Bailey's Antwort:

Ich habe versucht, mehrere Ordner (in Unterordnern) mit dem Namen et-cache (Cache-Ordner vom Wordpress-Thema divi) aus dem Index zu entfernen und nicht mehr zu verfolgen.

Ich habe hinzugefügt

et-cache/

zur .gitignore-Datei. Aber

git rm -r --cached et-cache

ergebte in einem Fehler:

fatal: Pathspec "et-cache" stimmte mit keiner Datei überein

Also war die Lösung, Powershell zu verwenden:

Get-ChildItem et-cache -Recurse |% {git rm -r --cached $_.FullName}

Dies sucht nach allen Unterordnern mit dem Namen et-cache. Jeder der Ordnerpfade (FullName) wird dann verwendet, um sie von der Verfolgung in git zu entfernen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X