Ich habe den Ordner, application/
den ich dem hinzufüge .gitignore
. Innerhalb des application/
Ordners befindet sich der Ordner application/language/gr
. Wie kann ich diesen Ordner einschließen?
Ich habe es versucht
application/
!application/language/gr/
ohne Glück ...
.gitignore
Dokumentation zum " Musterformat" gerade klarer (Dezember 2013). Siehe meine Antwort untenAntworten:
Wenn Sie ausschließen
application/
, wird immer alles darunter ausgeschlossen (auch wenn ein späteres negatives Ausschlussmuster („unignore“) möglicherweise mit etwas unter übereinstimmtapplication/
).Um das zu tun, was Sie wollen, müssen Sie jedes übergeordnete Verzeichnis von allem, was Sie "abmelden" möchten, "abmelden". Normalerweise schreiben Sie Regeln für diese Situation paarweise: Ignorieren Sie alles in einem Verzeichnis, aber nicht ein bestimmtes Unterverzeichnis.
Hinweis
Das Nachlaufen
/*
ist signifikant:dir/
schließt ein Verzeichnis mit dem Namendir
und (implizit) alles darunter aus.Mit
dir/
wird Git niemals etwas unter betrachtendir
und daher niemals eines der "Ausschluss" -Muster auf etwas unter anwendendir
.dir/*
sagt nichts über sichdir
selbst aus; es schließt einfach alles unter ausdir
. Mit verarbeitetdir/*
Git den direkten Inhalt vondir
und gibt anderen Mustern die Möglichkeit, einen Teil des Inhalts (!dir/sub/
) auszuschließen .quelle
/*
ist signifikant. Wenn ein Verzeichnis ausgeschlossen ist, wird Git niemals den Inhalt dieses Verzeichnisses anzeigen. Das Musterdir/
schließt ein Verzeichnis mit dem Namendir
und (implizit) alles darunter aus. Das Musterdir/*
sagt nichts über sichdir
selbst aus; es schließt einfach alles unter ausdir
. Mitdir/
wird Git niemals etwas unter betrachtendir
und daher niemals eines der "Ausschluss" -Muster auf etwas unter anwendendir
. Mit verarbeitetdir/*
Git den direkten Inhalt vondir
und gibt anderen Mustern die Möglichkeit, einen Teil des Inhalts (!dir/sub/
) auszuschließen .git add -f .
git status
sagt Ihnen nur, dass das Verzeichnis der obersten Ebene hinzugefügt wird. Führen Sie stattdessen eingit add
Verzeichnis der obersten Ebene aus undgit status
listen Sie dann (hoffentlich) die Teilmenge der Dateien auf, die mit dem Muster übereinstimmen.Commit 59856de von Karsten Blees (kblees) für Git 1.9 / 2.0 (Q1 2014) verdeutlicht diesen Fall:
gitignore.txt
: Klären Sie den rekursiven Charakter ausgeschlossener VerzeichnisseIn Ihrem Fall:
Sie müssen zuerst Ordner auf die weiße Liste setzen, bevor Sie Dateien in einem bestimmten Ordner auf die weiße Liste setzen können.
Update Februar / März 2016:
Beachten Sie, dass es mit git 2.9.x / 2.10 (Mitte 2016?) Möglicherweise möglich ist, eine Datei erneut einzuschließen, wenn ein übergeordnetes Verzeichnis dieser Datei ausgeschlossen wird, wenn der wieder aufgenommene Pfad keinen Platzhalter enthält .
Nguyễn Thái Ngọc Duy (
pclouds
) versucht, diese Funktion hinzuzufügen:Mit Git 2.9+ hätte dies tatsächlich funktionieren können, wurde aber letztendlich rückgängig gemacht:
quelle
v2.8.1.windows.1
aber es scheint nicht zu funktionieren :(application/
+ -Musters!application/language/gr/
funktioniert wie erwartet.Die Antwort von @Chris Johnsen ist großartig, aber mit einer neueren Version von Git (1.8.2 oder höher) gibt es ein doppeltes Sternchenmuster, das Sie für eine etwas kürzere Lösung nutzen können:
Auf diese Weise müssen Sie das übergeordnete Verzeichnis des Unterordners, den Sie verfolgen möchten, nicht "aufheben".
Mit Git 2.17.0 (nicht sicher, wie früh vor dieser Version. Möglicherweise zurück zu 1.8.2) funktioniert die Verwendung des
**
Musters in Kombination mit Ausschlüssen für jedes Unterverzeichnis, das zu Ihren Dateien führt. Zum Beispiel:quelle
**
mit null Unterordnern*
übereinstimmen kannlanguage
und es übereinstimmt und ausschließt, wodurch die Aufnahme von verhindert wirdgr
. Die gesamte Kette der Eltern, die @Chris Johnson empfiehlt, scheint immer noch notwendig zu sein./www/**/* !/www/config.xml !/www/res
config.xml und das res-Verzeichnis werden immer noch ignoriert.!/www/res/
. Sie können dasfolder/**/*
Muster verwenden, müssen jedoch weiterhin Ausschlüsse für jedes Unterverzeichnis hinzufügen, das Sie hinzufügen möchten. Es ist immer noch kürzer und lesbarer als die Ignorier- / Ausschluss-Kombination.Es gibt eine Reihe ähnlicher Fragen dazu, daher werde ich das posten, was ich zuvor geschrieben habe:
Die einzige Möglichkeit, dies auf meiner Maschine zum Laufen zu bringen, bestand darin, es folgendermaßen zu tun:
Beachten Sie, wie Sie Inhalte für jede Ebene, die Sie einschließen möchten, explizit zulassen müssen. Wenn ich also Unterverzeichnisse 5 tief unter Themen habe, muss ich das noch formulieren.
Dies stammt aus @ Yarins Kommentar hier: https://stackoverflow.com/a/5250314/1696153
Dies waren nützliche Themen:
Ich habe es auch versucht
und
**/wp-content/themes/**
oder
/wp-content/themes/**/*
Nichts davon hat auch für mich funktioniert. Viel Versuch und Irrtum!
quelle
!
Regeln unten einfügen .Ich habe nur festgestellt, dass dies tatsächlich funktioniert.
quelle
Der einfachste und wahrscheinlich beste Weg ist, die Dateien manuell hinzuzufügen (im Allgemeinen hat dies Vorrang vor
.gitignore
Regeln im Stil):Möglicherweise möchten Sie sogar die
-N
Absicht, ein Flag hinzuzufügen , um vorzuschlagen, dass Sie sie hinzufügen, jedoch nicht sofort. Ich mache das oft für neue Dateien, für die ich noch nicht bereit bin.Dies ist eine Kopie einer Antwort, die auf einer möglicherweise doppelten Qualitätssicherung veröffentlicht wurde. Ich reposte es hier, um die Sichtbarkeit zu verbessern. Ich finde es einfacher, keine Gitignore-Regeln durcheinander zu bringen.
quelle
Also, da viele Programmierer Knoten verwenden. Der Anwendungsfall, der diese Frage erfüllt, besteht darin,
node_modules
außer einem Modul auszuschließen,module-a
zum Beispiel:quelle
2.10.2.windows.1
.Fügen Sie eine zusätzliche Antwort hinzu:
Hier ist das Ergebnis:
quelle
Insbesondere für die älteren Git-Versionen funktionieren die meisten Vorschläge nicht so gut. In diesem Fall würde ich einen separaten .gitignore in das Verzeichnis einfügen, in das der Inhalt unabhängig von anderen Einstellungen aufgenommen werden soll, und dort zulassen, was benötigt wird.
Zum Beispiel: /.gitignore
/dependency_files/.gitignore
Alles in / dependency_files (sogar DLL-Dateien) ist also in Ordnung.
quelle
Ich habe hier einen ähnlichen Fall gefunden, in dem in Laravel standardmäßig
.gitignore
alle mit Asterix verwendeten ignoriert werden und dann das öffentliche Verzeichnis überschrieben wird.Dies ist nicht ausreichend, wenn Sie auf das OP-Szenario stoßen.
Wenn Sie eine bestimmte Unterordner begehen wollen
public
, sagen für zB in Ihrempublic/products
Verzeichnis möchten Sie Dateien enthalten , die einen Unterordner tief zB enthalten sindpublic/products/a/b.jpg
werden sie nicht richtig erkannt werden, auch wenn Sie sie hinzufügen speziell wie diese!/public/products
,!public/products/*
etc ..Die Lösung besteht darin, sicherzustellen, dass Sie für jede Pfadebene einen Eintrag hinzufügen, um alle zu überschreiben.
quelle
Nur ein weiteres Beispiel für das Durchlaufen der Verzeichnisstruktur, um genau das zu erhalten, was Sie möchten. Hinweis: Ich habe nicht ausschließen ,
Library/
aberLibrary/**/*
> git add Library
> git status
quelle
In WordPress hat mir das geholfen:
quelle
gitignore - Gibt absichtlich nicht verfolgte Dateien an, die ignoriert werden sollen.
Beispiel zum Ausschließen von allem außer einem bestimmten Verzeichnis foo / bar (beachten Sie das / * - ohne den Schrägstrich würde der Platzhalter auch alles in foo / bar ausschließen ):
Ein weiteres Beispiel für WordPress :
Weitere Informationen finden Sie hier: https://git-scm.com/docs/gitignore
quelle
Ich verwende diese Problemumgehung häufig in der CLI, wo
.gitignore
ich anstelle der Konfiguration meiner eine separate.include
Datei erstelle, in der ich die (Unter-) Verzeichnisse definiere, die trotz Verzeichnissen direkt oder rekursiv ignoriert werden sollen.gitignore
.Somit benutze ich zusätzlich
während der Inszenierung vor dem Festschreiben.
Für das OP schlage ich vor, ein zu verwenden,
.include
das folgende Zeilen enthält:HINWEIS: Die Verwendung
cat
erlaubt nicht die Verwendung von Aliasen (innerhalb.include
) zur Angabe von $ HOME (oder eines anderen spezifischen Verzeichnisses). Dies liegt daran, dass die Zeilehomedir/app1/*
bei Übergabe angit add
den obigen Befehl wie folgt angezeigtgit add 'homedir/app1/*'
wird und das Einschließen von Zeichen in einfache Anführungszeichen ('') den Literalwert jedes Zeichens in den Anführungszeichen beibehält , wodurch verhindert wird, dass Aliase (z. B. homedir ) funktionieren (siehe Bash Single) Zitate ).Hier ist ein Beispiel für eine
.include
Datei , die ich in meinem Repo verwende hier .quelle
Ich wollte jquery-Produktion js-Dateien verfolgen und das funktionierte:
quelle
meine JetBrains IntelliJ IDEA .gitignore-Konfiguration, bei der ich den gesamten
.idea
Ordner ausschließen muss, außer.idea/runConfigurations
:Siehe: https://github.com/daggerok/gitignore-idea-runConfigurations
quelle