Ich habe eine Whitelist nur für Textdateien erstellt.
*
!*.txt
Jetzt habe ich eine nicht verfolgte Textdatei in einem Unterverzeichnis - sub/dir/file.txt
und diese wird NICHT angezeigt (sie wird ignoriert). Textdateien im Stammverzeichnis werden jedoch angezeigt.
Warum ist das so und wie behebe ich es?
.gitignore
.Antworten:
Wenn Sie es auf diese Weise versuchen, schlägt dies fehl, da Sie am Ende die Verzeichnisse in Ihrer Struktur auf die schwarze Liste setzen.
Um dies zu lösen, möchten Sie alles auf die schwarze Liste setzen, was kein Verzeichnis ist und nicht zu den Dateitypen gehört, die Sie festschreiben möchten, ohne Verzeichnisse auf die schwarze Liste zu setzen .
Die
.gitignore
Datei, die dies tun wird:Getestet dies in einer dreistufigen Struktur Whitelisting für
.txt
Dateien in Gegenwart*.one
,*.two
und*.three
Dateien unter Verwendung eines.gitignore
sich im Stammverzeichnis der Repository - Werke für mich. Sie müssen nicht.gitignore
allen Verzeichnissen in Ihrer Struktur Dateien hinzufügen .Informationen, mit denen ich die Antwort herausgefunden habe, stammen unter anderem von diesem (stackoverflow.com).
quelle
!.gitignore
, wenn Sie verwenden*
, nicht wahr?/*
nur den Ordner der obersten Ebene auf die schwarze Liste zu setzen , aber nicht alle Ordner rekursiv, was eigentlich bedeutet,.gitignore
dass die Unterordner eines Ordners nicht in die Whitelist aufgenommen werden sollten.Ein einfacher Weg, dies zu erreichen, ist:
Dies funktioniert, weil
gitignore
Muster angewendet werden, die nicht/
auf jeder Ebene unterhalb der.gitignore
Datei beginnen:Wenn Sie dies für Dateien in einem Verzeichnis tun möchten , werden die Dinge komplexer:
Dies funktioniert, weil
gitignore
spezielle Regeln für**
:Das Schlüsselelement ist, sicherzustellen, dass Sie Verzeichnisse nicht ignorieren, da dann jede Datei in diesem Verzeichnis unabhängig von anderen Regeln ignoriert wird.
quelle
Ich habe lange gesucht:
Angenommen, ich habe eine große Ordnerstruktur mit ~ 100.000 rekursiv verschachtelten Verzeichnissen. In diesen Ordnern befinden sich ungefähr 30.000 Dateien vom Typ
.txt
(in meinem Fall: Typ*.md
). Neben diesen*.md
Dateien befinden sich beispielsweise 500 GB (über eine Million) Dateien, die ich nicht verfolgen möchte.Ich möchte, dass git nur
.txt
(oder*.md
) Dateien in allen Ordnern und Unterverzeichnissen verfolgt.Die richtige Antwort sollte lauten: Dies ist in Git nicht möglich.
Was ich stattdessen getan habe:
[edit: hat auch nicht funktioniert - Ich habe versucht, einen Ordner mit Symlinks (oder Hardlinks) zu erstellen und dort git zu verwenden, aber git folgt keinen Symlinks und überschreibt Hardlinks. Doh!]
quelle