5353 Stimmen

Wie kann ich ein leeres Verzeichnis zu einem Git-Repository hinzufügen?

Wie kann ich ein leeres Verzeichnis (das keine Dateien enthält) zu einem Git-Repository hinzufügen?

8voto

Mild Fuzz Punkte 27649

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.

8voto

ajmedway Punkte 1476

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! ;)

enter image description here

7voto

Trendfischer Punkte 6332

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...)

7voto

arcseldon Punkte 32403

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.

5voto

Mike Punkte 1879

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.

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