1496 Stimmen

.gitignore schließt Ordner aus, aber enthält bestimmten Unterordner

Ich habe den Ordner application/, den ich zur .gitignore hinzufüge. Innerhalb des Ordners application/ befindet sich der Ordner application/language/gr. Wie kann ich diesen Ordner einschließen?

Ich habe das versucht

application/
!application/language/gr/

18voto

D. Ben Knoble Punkte 3850

Der einfachste und wahrscheinlich beste Weg ist, die Dateien manuell hinzuzufügen (das hat allgemein Vorrang vor Regeln im .gitignore-Stil):

git add /pfad/zum/modul

Du könntest -f benötigen, wenn die Datei bereits ignoriert wird. Du möchtest vielleicht sogar die -N Absicht zu hinzufügen-Flagge, um anzuzeigen, dass du sie hinzufügen wirst, aber nicht sofort. Ich mache das oft für neue Dateien, die ich noch nicht bereit bin zu stagen.


Dies ist eine Kopie einer Antwort, die auf was leicht eine doppelte QA sein könnte, gepostet wurde. Ich poste sie hier erneut für erhöhte Sichtbarkeit—es fällt mir einfacher, kein Durcheinander von gitignore-Regeln zu haben.

16voto

Maksim Kostromin Punkte 2581

Meine JetBrains IntelliJ IDEA .gitignore-Konfiguration, bei der ich den gesamten .idea-Ordner ausschließen muss, außer .idea/runConfigurations:

.idea
!.idea/
.idea/*
!.idea/runConfigurations/

siehe: https://github.com/daggerok/gitignore-idea-runConfigurations

15voto

BMC Punkte 95

Ich wollte die Nagios-Konfigurationsdateien in /etc/nagios/ zusammen mit den Plugins in /usr/lib64/nagios/plugins/ verfolgen. Dafür habe ich ein Git-Repo in / initialisiert und die folgende Ausschlussliste verwendet:

/*
!etc
etc/*
!etc/nagios
!usr
usr/*
!usr/lib64
usr/lib64/*
!usr/lib64/nagios
usr/lib64/nagios/*
!usr/lib64/nagios/plugins

Git geht die Liste folgendermaßen durch:

/*             schließe alles unterhalb von / aus...
!etc           aber schließe /etc wieder ein
etc/*             schließe alles unterhalb von /etc/ aus...
!etc/nagios       aber schließe /etc/nagios wieder ein
!usr           aber schließe /usr wieder ein
usr/*             schließe alles unterhalb von /usr/ aus...
                  und so weiter...

14voto

jiayi797 Punkte 111

Fügen Sie eine Datei mit dem Namen .gitignore zum Unterordner hinzu, füllen Sie sie dann aus

!/Bin/

Dies funktioniert für mich!

13voto

blamb Punkte 3982

Ich habe hier einen ähnlichen Fall gefunden, wo in Laravel standardmäßig .gitignore alles mit einem Asterix ignoriert, dann das public-Verzeichnis überschreibt. (Dies ist auch die gleiche Lösung wie die Hauptantwort von @Chris Johnsen, vielleicht nur etwas schlanker und prägnanter.)

*
!public
!.gitignore

Dies reicht nicht aus, wenn Sie auf das im OP-Szenario stoßen.

Wenn Sie bestimmte Unterordner von public commiten möchten, zum Beispiel in Ihrem public/products-Verzeichnis möchten Sie Dateien einschließen, die eine Unterordner-Ebene tiefer sind, z.B. um public/products/a/b.jpg einzuschließen, werden sie nicht korrekt erkannt, selbst wenn Sie sie speziell hinzufügen wie !/public/products, !public/products/*, usw..

Die Lösung besteht darin, sicherzustellen, dass Sie für jede Pfadstufe einen Eintrag hinzufügen, um sie alle zu überschreiben.

*
!.gitignore
!public/
!public/*/
!public/products/
!public/products/*
!public/products/*/
!public/products/*/
!public/products/*/*

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