Wie kann ich ein leeres Verzeichnis (das keine Dateien enthält) zu einem Git-Repository hinzufügen?
Antworten
Zu viele Anzeigen?Ich baue immer eine Funktion, die nach meiner gewünschten Ordnerstruktur sucht und sie für mich im Projekt erstellt. Dadurch wird dieses Problem umgangen, da die leeren Ordner stellvertretend in Git gehalten werden.
function check_page_custom_folder_structure () {
if (!is_dir(TEMPLATEPATH."/page-customs"))
mkdir(TEMPLATEPATH."/page-customs");
if (!is_dir(TEMPLATEPATH."/page-customs/css"))
mkdir(TEMPLATEPATH."/page-customs/css");
if (!is_dir(TEMPLATEPATH."/page-customs/js"))
mkdir(TEMPLATEPATH."/page-customs/js");
}
Dies ist in PHP, aber ich bin sicher, dass die meisten Sprachen die gleiche Funktionalität unterstützen, und da die Erstellung der Ordner von der Anwendung übernommen wird, werden die Ordner immer vorhanden sein.
Wenn Sie einen Ordner hinzufügen wollen, der eine Menge flüchtiger Daten in mehreren semantischen Verzeichnissen enthält, dann ist ein Ansatz, etwas wie das folgende zu Ihrer Root .gitignore hinzuzufügen...
/app/data/**/*.* !/app/data/**/*.md
Dann können Sie beschreibende README.md-Dateien übertragen (oder leere Dateien, das spielt keine Rolle, solange Sie sie eindeutig zuordnen können, wie mit dem *.md
in diesem Fall) in jedem Verzeichnis, um sicherzustellen, dass die Verzeichnisse alle Teil des Repo bleiben, aber die Dateien (mit Erweiterungen) ignoriert werden. BESCHRÄNKUNG: .
's sind in den Verzeichnisnamen nicht erlaubt!
Sie können alle diese Verzeichnisse mit Xml-/Bilddateien oder anderen Dateien füllen und weitere Verzeichnisse unter /app/data/
im Laufe der Zeit, wenn sich der Speicherbedarf für Ihre Anwendung entwickelt (wobei die README.md-Dateien dazu dienen, eine Beschreibung zu liefern, wofür die einzelnen Speicherverzeichnisse genau gedacht sind).
Es besteht keine Notwendigkeit, Ihre Daten weiter zu ändern. .gitignore
oder dezentralisieren, indem sie eine neue .gitignore
für jedes neue Verzeichnis. Wahrscheinlich nicht die klügste Lösung, aber sie ist kurz und bündig in Bezug auf Gitignore und funktioniert bei mir immer. Schön und einfach! ;)
Manchmal hat man es mit schlecht geschriebenen Bibliotheken oder Software zu tun, die ein "richtiges" leeres und existierendes Verzeichnis benötigen. Das Einfügen eines einfachen .gitignore
o .keep
könnte sie unterbrechen und einen Fehler verursachen. Das Folgende könnte in diesen Fällen helfen, ist aber keine Garantie...
Erstellen Sie zunächst das benötigte Verzeichnis:
mkdir empty
Dann fügen Sie einen kaputten symbolischen Link zu diesem Verzeichnis hinzu (aber in jedem anderen Fall als dem oben beschriebenen Anwendungsfall verwenden Sie bitte einen README
mit einer Erklärung):
ln -s .this.directory empty/.keep
Um Dateien in diesem Verzeichnis zu ignorieren, können Sie es in Ihrem Stammverzeichnis hinzufügen .gitignore
:
echo "/empty" >> .gitignore
Um die ignorierte Datei hinzuzufügen, verwenden Sie einen Parameter, um sie zu erzwingen:
git add -f empty/.keep
Nach der Übergabe haben Sie einen defekten symbolischen Link in Ihrem Index und Git erstellt das Verzeichnis. Der kaputte Link hat einige Vorteile, da er keine reguläre Datei ist und auf keine reguläre Datei zeigt. Er passt also sogar zu dem Teil der Frage "(der keine Dateien enthält)", nicht von der Absicht her, sondern von der Bedeutung her, denke ich:
find empty -type f
Dieser Befehl zeigt ein leeres Ergebnis, da keine Dateien in diesem Verzeichnis vorhanden sind. Daher sehen die meisten Anwendungen, die alle Dateien in einem Verzeichnis abfragen, diesen Link nicht, zumindest wenn sie ein "file exists" oder ein "is readable" machen. Auch einige Skripte finden dort keine Dateien:
$ php -r "var_export(glob('empty/.*'));"
array (
0 => 'empty/.',
1 => 'empty/..',
)
Ich empfehle aber dringend, diese Lösung nur unter besonderen Umständen zu verwenden, eine gute schriftliche README
in einem leeren Verzeichnis ist normalerweise die bessere Lösung. (Und ich weiß nicht, ob das mit einem Windows-Dateisystem funktioniert...)
Eine einfache Möglichkeit, dies zu tun, ist das Hinzufügen einer .gitkeep
in das Verzeichnis, das Sie (derzeit) leer lassen möchten.
Siehe dies SOF-Antwort für weitere Informationen - was auch erklärt, warum einige Leute die konkurrierende Konvention des Hinzufügens einer .gitignore-Datei (wie in vielen Antworten hier angegeben) verwirrend finden.
Das ist eine weitere Option in diesem Spiel.
Angenommen, Sie möchten ein Verzeichnis hinzufügen zu git
dass für alle Zwecke im Zusammenhang mit git
sollte leer bleiben und sein Inhalt niemals verfolgt werden, ein .gitignore
wie hier schon mehrfach vorgeschlagen wurde, wird dies der Fall sein.
Das Format ist, wie bereits erwähnt, wie folgt:
*
!.gitignore
Wenn Sie dies in der Befehlszeile auf einen Schlag erledigen wollen, während Sie innerhalb das Verzeichnis, das Sie hinzufügen möchten, können Sie ausführen:
$ echo "*" > .gitignore && echo '!.gitignore' >> .gitignore && git add .gitignore
Ich selbst habe ein Shell-Skript, mit dem ich dies tue. Nennen Sie das Skript, wie Sie wollen, und fügen Sie es entweder irgendwo in Ihrem Include-Pfad hinzu oder verweisen Sie direkt darauf:
#!/bin/bash
dir=''
if [ "$1" != "" ]; then
dir="$1/"
fi
echo "*" > $dir.gitignore && \
echo '!.gitignore' >> $dir.gitignore && \
git add $dir.gitignore
Damit können Sie es entweder aus dem Verzeichnis heraus ausführen, das Sie hinzufügen möchten, oder das Verzeichnis als ersten und einzigen Parameter angeben:
$ ignore_dir ./some/directory
Eine weitere Option (als Antwort auf einen Kommentar von @GreenAsJade), wenn Sie einen leeren Ordner verfolgen wollen, der MAI in Zukunft verfolgte Dateien enthalten, aber vorerst leer sein werden, können Sie die *
von der .gitignore
Datei, und prüfen Sie dass in. Im Grunde besagt die Datei nur: "Nicht ignorieren ich ", aber ansonsten ist das Verzeichnis leer und wird verfolgt.
Ihr .gitignore
Datei würde wie folgt aussehen:
!.gitignore
Das war's, checken Sie das ein, und Sie haben ein leeres, aber erfasstes Verzeichnis, in dem Sie später Dateien erfassen können.
Der Grund, warum ich vorschlage, diese eine Zeile in der Datei beizubehalten, ist, dass sie die .gitignore
Zweck. Andernfalls könnte jemand später auf die Idee kommen, sie zu entfernen. Es kann helfen, wenn Sie einen Kommentar über die Zeile setzen.