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.

2150voto

CB Bailey Punkte 693084

Vor Version 1.8.2 hatte ** keine besondere Bedeutung im .gitignore. Ab 1.8.2 unterstützt git **, um null oder mehr Unterverzeichnisse zu bedeuten (siehe Versionshinweise).

Der Weg, um alle Verzeichnisse mit dem Namen bin unterhalb des aktuellen Levels in einem Verzeichnisbaum zu ignorieren, ist mit einer .gitignore Datei mit dem Muster:

bin/

In der man-Seite gibt es ein Beispiel, wie man ein Verzeichnis namens foo mit einem analogen Muster ignorieren kann.

Wenn Sie bereits einige bin Verzeichnisse in Ihrem Git-Index haben, die Sie nicht mehr verfolgen möchten, müssen Sie diese explizit entfernen. Git wird nicht aufhören, Pfade zu verfolgen, die bereits verfolgt werden, nur weil sie jetzt mit einem neuen .gitignore Muster übereinstimmen. Führen Sie eine Ordner-Entfernung (rm) nur vom Index (--cached) rekursiv (-r) aus. Beispiel für die Befehlszeile für das Stammverzeichnis des bin-Ordners:

git rm -r --cached bin

75 Stimmen

Ab git 1.8.2 wird git ** in .gitignore-Dateien akzeptieren (Quelle: Changelog 1.8.2)

18 Stimmen

Ist bin das gleiche wie bin/?

40 Stimmen

@Nisba, sie sind unterschiedlich, bin ignoriert Dateien mit dem Namen bin, während bin/ für Verzeichnisse mit dem Namen bin ist.

534voto

Der .gitignore deines Traums scheint zu sein:

bin/

auf der obersten Ebene.

1 Stimmen

Füge es in gitignore_global hinzu

2 Stimmen

@GAlexander, warum sollte man bin/-Verzeichnisse global ignorieren wollen? Oft enthalten sie versionierten Inhalt. Und ein globales Ignorieren wird sich nicht auf andere Benutzer des Repositories auswirken.

299voto

plancys Punkte 3593

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

Wenn Sie bereits eine Datei eingecheckt haben und sie ignorieren möchten, wird Git die Datei nicht ignorieren, wenn Sie später eine Regel hinzufügen. In solchen Fällen müssen Sie zuerst die Datei deaktivieren, indem Sie den folgenden Befehl in Ihrem Terminal ausführen:

git rm --cached

Also, wenn Sie einige Verzeichnisse in Ihrem lokalen Repository ignorieren möchten (die bereits existieren), nachdem Sie .gitignore bearbeitet haben, möchten Sie dies in Ihrem Stammverzeichnis ausführen

git rm --cached -r .
git add .

Es wird im Grunde genommen Ihr lokales Repository 'aktualisieren' und ignorierte Dateien aus der Staging-Area entfernen.

Siehe:

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

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

0 Stimmen

Wenn ich normalerweise ein git add -A bei meinen Commits mache, kann ich stattdessen dies verwenden? Und kann ich den Punkt in der ersten Zeile auch durch -A ersetzen?

75voto

VonC Punkte 1117238

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

Die Muster in den Dateien .gitignore und .gitattributes können `/` enthalten, als Muster, das 0 oder mehr Ebenen von Unterverzeichnissen abgleicht**.

Zum Beispiel passt "foo/**/bar" zu "bar" sowohl in "foo" selbst als auch in einem Unterverzeichnis von "foo".

In Ihrem Fall bedeutet dies, dass diese Zeile jetzt unterstützt werden könnte:

/main/**/bin/

52voto

wisbucky Punkte 26902
[Bb]in/

passt sowohl Groß- als auch Kleinbuchstaben an

2 Stimmen

[B]IN/ soll das einzige in Großbuchstaben sein

0 Stimmen

Wie lässt man nur den Bin-Ordner ignorieren und den bin-Ordner in Git committen? [B]in/ wird sowohl Bin als auch bin committen.

7 Stimmen

Das sollte es tun, @Gank: Bin/ !bin/

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