Frage

Wie kann ich ein leeres Verzeichnis (enthält keine Dateien) zu einer Git-Repository?

War es hilfreich?

Lösung

Ein andere Möglichkeit, ein Verzeichnis Aufenthalt (fast) leer (im Repository) zu machen, ist eine .gitignore Datei in diesem Verzeichnis zu erstellen, die diese vier Zeilen enthalten:

# Ignore everything in this directory
*
# Except this file
!.gitignore

Dann müssen Sie den Auftrag nicht direkt die Art und Weise, die Sie in m104 Lösung zu tun haben.

Das gibt auch den Vorteil, dass Dateien in diesem Verzeichnis werden nicht als „untracked“ angezeigt, wenn Sie einen Git-Status zu tun.

@GreenAsJade 's Kommentar persistent:

  

Ich denke, es ist erwähnenswert, dass diese Lösung tut genau das, was die Frage nach, ist aber vielleicht nicht, was auf diese Frage suchen viele Menschen gesucht haben. Diese Lösung gewährleistet, dass das Verzeichnis leer bleibt. Er sagt: „Ich wirklich nie Dateien hier eingecheckt wollen“. Im Gegensatz zu „Ich habe keine Dateien in hier zu überprüfen, noch, aber ich brauche das Verzeichnis hier, Dateien kommen später sein können“.

Andere Tipps

Sie können nicht. Sehen Sie sich die Git FAQ .

  

Zur Zeit der Gestaltung des git Index   (Staging-Bereich) erlaubt nur Dateien   aufgeführt werden, und niemand kompetent genug   um die Änderung vorzunehmen leer zu ermöglichen   Verzeichnisse hat etwa gepflegt genug   diese Situation, es zu beheben.

     

Verzeichnisse werden automatisch hinzugefügt   beim Hinzufügen von Dateien in sie. Das   ist, Verzeichnisse müssen nie hinzugefügt werden   in das Repository und werden nicht verfolgt   auf eigene Faust.

     

Sie können sagen: „git add <dir>“ und es   hinzufügen, werden Dateien dort.

     

Wenn Sie wirklich brauchen, um ein Verzeichnis   in Kassen existieren sollten Sie eine erstellen   Datei drin. .gitignore funktioniert gut für   dieser Zweck; Sie können es leer lassen,   oder in dem Namen von Dateien füllen Sie   erwartet in dem Verzeichnis zu zeigen.

Erstellen Sie eine leere Datei .gitkeep im Verzeichnis genannt wird, und dass hinzuzufügen.

Sie immer eine Readme-Datei im Verzeichnis setzen könnte mit einer Erklärung, warum diese wollen, sonst leer, Verzeichnis im Repository.

touch .keep

Unter Linux dies erzeugt eine leere Datei .keep benannt. Dieser Name wird über .gitkeep bevorzugt, da erstere zu agnostic Git ist, während das letztere spezifisch für Git ist. Zweitens, wie ein anderer Benutzer bemerkt hat, sollte die .git Präfix Konvention für Dateien und Verzeichnisse reserviert werden, die Git selbst verwendet.

Alternativ kann, wie in einem anderen beantworten , kann das Verzeichnis eine beschreibende README oder README.md Datei statt.

Natürlich erfordert dies, dass das Vorhandensein der Datei wird nicht dazu führen Ihre Anwendung zu brechen.

Warum sollten wir müssen versioniert Ordner leeren

Das Wichtigste zuerst:

  

Ein leeres Verzeichnis kann nicht Teil eines Baumes unter dem Git Versionierungssystem .

sein

Es wird einfach nicht verfolgt werden. Aber es gibt Szenarien, in denen „Versionierung“ leeren Verzeichnisse können sinnvoll sein, zum Beispiel:

  • Baugerüst eine vordefinierten Ordnerstruktur , es verfügbar für jeden Benutzer / Beitrag des Repository zu machen; oder, als Spezialfall der oben genannten, einen Ordner für temporäre Dateien , wie ein cache/ oder logs/ Verzeichnisse erstellen, in denen wir den Ordner zur Verfügung stellen möchten, aber .gitignore seinen Inhalt
  • in den oben angegeben, einige Projekte wird ohne einige Ordner nicht funktionieren (was oft ein Hinweis auf ein schlecht konzipiertes Projekt ist, aber es ist ein häufiges Szenario der realen Welt und vielleicht könnte es sein, sagen wir, die Erlaubnis Probleme angegangen werden).

Einige vorgeschlagene Abhilfen

Viele Anwender legen nahe:

  1. Platzieren eine README-Datei oder eine andere Datei mit Inhalt, um das Verzeichnis nicht leer ist, oder
  2. zu machen
  3. eine .gitignore Datei mit einer Art „umgekehrter Logik“ Erstellen (das heißt alle Dateien enthält), die am Ende, 1 den gleichen Zweck der Annäherung # dient.

Während beiden Lösungen sicher arbeiten Ich finde sie nicht mit einem sinnvollen Umgang mit Git Versionsverwaltung.

  • Warum soll man gefälschte Dateien oder READMEs setzen, die vielleicht nicht wirklich in Ihrem Projekt wollen Sie tun?
  • Warum Gebrauch .gitignore etwas zu tun ( hält Dateien), die genau das Gegenteil von dem, was es bedeutet, ist für ( ohne Dateien), auch wenn es möglich ist?

.gitkeep Ansatz

Verwenden Sie ein leer Datei namens .gitkeep, um das Vorhandensein des Ordners, in dem Versionierungssystem zu erzwingen.

Obwohl es nicht einen so großen Unterschied scheinen:

  • Sie verwenden, um eine Datei, die die einzigen Zweck des Haltens des Ordners hat. Sie nicht dort setzen alle Informationen, die Sie nicht wollen, setzen.

    Zum Beispiel sollten Sie READMEs wie, na ja, READMEs mit nützlichen Informationen, nicht als Vorwand benutzen, um den Ordner zu halten.

    Die Trennung von Bedenken ist immer eine gute Sache, und Sie können immer noch eine .gitignore zu ignorieren unerwünschte Dateien hinzufügen.

  • Naming es .gitkeep macht es sehr klar und einfach aus dem Dateinamen selbst (und auch an anderen Entwicklern , die für ein gemeinsames Projekt und einer der Kernaufgaben einer Git-Repository gut ), dass diese Datei ist

    • Eine Datei, die nicht mit dem Code (wegen des führenden Punktes und der Namen)
    • Eine Datei eindeutig im Zusammenhang mit Git
    • Sein Ziel ( hält ) ist klar formuliert und konsequent und semantisch in seiner Bedeutung zu im Gegensatz ignorieren

Adoption

Ich habe den .gitkeep Ansatz sehr wichtig Frameworks wie Laravel , Angular-CLI .

Wie in anderen Antworten beschrieben, Git ist nicht in der Lage, um leere Verzeichnisse in seinem Staging-Bereich darstellen. (Siehe Git FAQ .) Wenn jedoch, für Ihre Zwecke ist ein Verzeichnis leer genug, wenn es nur eine .gitignore Datei enthält, dann können Sie .gitignore Dateien in leeren Verzeichnissen nur über erstellen:

find . -type d -empty -exec touch {}/.gitignore \;

Andy Lester ist richtig, aber wenn Ihr Verzeichnis muss nur leer sein, und nicht leer leer ist, können Sie eine leere .gitignore Datei in dort als Abhilfe setzen.

Als beiseite, ist dies ein Implementierungsproblem, kein grundsätzliches Git Speicher Design-Problem. Wie viele Male auf der Git-Mailingliste erwähnt worden ist, hat den Grund, dass dies nicht umgesetzt worden, dass niemand genug vorlegen einen Patch für sie nicht gekümmert hat, dass es nicht nicht getan werden könnte oder sollte.

Die Ruby on Rails Ordnererstellungsfu Weise log:

mkdir log && touch log/.gitkeep && git add log/.gitkeep

Nun wird das Log-Verzeichnis im Baum enthalten sein. Es ist super-hilfreich, wenn bereitstellen, so dass Sie nicht eine Routine schreiben, müssen log Verzeichnisse zu machen.

Die Logfiles gehalten geführt durch Ausgabe werden können,

echo log/dev.log >> .gitignore

aber wahrscheinlich wußte das.

Git verfolgen nicht leere Verzeichnisse. Sehen Sie sich die Git FAQ für weitere Erklärung. Die vorgeschlagene Abhilfe ist eine .gitignore Datei in dem leeren Verzeichnis zu setzen. Ich mag es nicht, dass die Lösung, weil die .gitignore von Unix-Konvention „versteckt“ ist. Auch gibt es keine Erklärung dafür, warum die Verzeichnisse leer sind.

Ich schlage vor, eine Readme-Datei in dem leeren Verzeichnis setzen zu erklären, warum das Verzeichnis leer ist, und warum muss es in Git zu verfolgen. Mit der Readme-Datei vorhanden, so weit wie Git betrifft, so ist das Verzeichnis nicht mehr leer.

Die eigentliche Frage ist, warum Sie das leere Verzeichnis in git brauchen? Normalerweise Sie irgendeine Art von Build-Skript, das das leere Verzeichnis vor dem Kompilieren / Laufen erstellen können. Wenn nicht, dann machen. Das ist eine weit bessere Lösung als leere Verzeichnisse in git setzen.

Also Sie haben irgendeinen Grund, warum Sie ein leeres Verzeichnis in git müssen. Setzen Sie diesen Grund in der Readme-Datei. Auf diese Weise andere Entwickler (und Zukunft Sie) wissen, warum das leere Verzeichnis dort sein muss. Sie werden auch wissen, dass Sie das leere Verzeichnis entfernen, wenn das Problem das leere Verzeichnis erforderlich ist gelöst.


Um jedes leeres Verzeichnis Liste verwenden Sie den folgenden Befehl ein:

find -name .git -prune -o -type d -empty -print

Um Platzhalter READMEs in jedem leeren Verzeichnis zu erstellen:

find -name .git -prune -o -type d -empty -exec sh -c \
  "echo this directory needs to be empty because reasons > {}/README.emptydir" \;

Um alles in dem Verzeichnis mit Ausnahme der Readme-Datei zu ignorieren geben Sie die folgenden Zeilen in Ihrer .gitignore:

path/to/emptydir/*
!path/to/emptydir/README.emptydir
path/to/otheremptydir/*
!path/to/otheremptydir/README.emptydir

Alternativ können Sie nur ausschließen alle Readme-Datei aus ignoriert werden:

path/to/emptydir/*
path/to/otheremptydir/*
!README.emptydir

jede README aufzulisten, nachdem sie bereits erstellt werden:

find -name README.emptydir

ACHTUNG:.. Dieser Tweak nicht wirklich so funktioniert, wie es stellt sich heraus, Es tut uns leid

Original-Beitrag unter:

ich eine Lösung gefunden, während mit Git-Interna zu spielen!

  1. Angenommen, Sie in Ihrem Repository sind.
  2. Erstellen Sie Ihr leeres Verzeichnis:

    $ mkdir path/to/empty-folder
    
  3. es zum Index hinzufügen Sanitär-Befehl und den leeren Baum SHA-1 mit

    $ git update-index --index-info
    040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904    path/to/empty-folder
    

    Geben Sie den Befehl aus und geben Sie dann die zweite Zeile. Drücken Sie Enter und dann Strg + D Ihre Eingabe zu beenden. Hinweis: Das Format ist Modus [SPACE] type [SPACE] SHA-1hash [TAB] Pfad (die Registerkarte ist wichtig, die Antwort Formatierung nicht bewahren).

  4. Das ist es! Ihr leerer Ordner in Ihrem Index. Alles, was Sie tun müssen, ist zu begehen.

Diese Lösung ist kurz und anscheinend funktioniert gut ( finden Sie in der EDIT! ), aber es ist nicht so leicht zu merken ...

Die leeren Baum SHA-1 kann durch die Schaffung eines neuen, leeren Git Repository, cd hinein und Ausgabe git write-tree, welche gibt den leeren Baum SHA-1.

gefunden werden

EDIT:

Ich habe diese Lösung wurde mit, da ich es gefunden. Es scheint, als die Schaffung ein Submodul genau die gleiche Art und Weise zu arbeiten, mit der Ausnahme, dass kein Modul überall definiert ist. Dies führt zu Fehlern bei der git submodule init|update Ausgabe. Das Problem ist, dass git update-index den 040000 tree Teil in 160000 commit umschreibt.

Darüber hinaus wird jede Datei unter diesem Pfad platziert wird nicht immer von Git bemerkt werden, da sie denkt, dass sie zu einem anderen Repository gehören. Das ist böse, da es leicht übersehen werden kann!

Allerdings, wenn Sie nicht bereits (und nicht) verwenden, um all Git Submodule in Ihrem Repository und die „leeren“ Ordner leer bleiben oder wenn Sie Git wollen von seiner Existenz wissen und seinen Inhalt ignorieren, Sie kann mit diesem Tweak gehen. Geht die übliche Art und Weise mit Submodule braucht mehr Schritte, die dieses zwicken.

Vielleicht ein leeres Verzeichnis hinzugefügt scheint, wie es die Weg des geringsten Widerstands wäre, weil Sie Skripte, die das Verzeichnis erwarten zu existieren (vielleicht, weil es ein Ziel für die erzeugte Binärdateien ist). Ein anderer Ansatz wäre, ändern Sie Ihre Skripte zum Erstellen des Verzeichnisses nach Bedarf .

mkdir --parents .generated/bin ## create a folder for storing generated binaries
mv myprogram1 myprogram2 .generated/bin ## populate the directory as needed

In diesem Beispiel können Sie überprüfen, in einem (gebrochen) symbolischen Link auf das Verzeichnis, so dass Sie es ohne den „.generated“ Präfix zugreifen können (aber dies ist optional).

ln -sf .generated/bin bin
git add bin

Wenn Sie die Sourcen auf Ihrem aufzuräumen können Sie einfach:

rm -rf .generated ## this should be in a "clean" script or in a makefile

Wenn Sie das nehmen oft vorgeschlagene Konzept von in einem fast leeren Ordner überprüft, haben Sie die kleinere Komplexität der Inhalte zu löschen, ohne auch die „.gitignore“ Datei zu löschen.

Sie können alle Ihre generierten Dateien ignorieren, indem Sie den folgenden auf Ihre Wurzel .gitignore hinzu:

.generated

Lassen Sie uns sagen, dass Sie ein leeres Verzeichnis mit dem Namen tmp :

$ mkdir tmp
$ touch tmp/.gitignore
$ git add tmp
$ echo '*' > tmp/.gitignore
$ git commit -m 'Empty directory' tmp

Mit anderen Worten, müssen Sie die Datei .gitignore zum Index hinzufügen, bevor Sie Git sagen kann (und alles andere in den leeren Verzeichnis) zu ignorieren.

Ich habe mit Blick auf das Problem mit leeren Verzeichnissen auch. Das Problem mit dem Platzhalter-Dateien ist, dass Sie sie erstellen müssen, und löschen Sie sie, wenn sie nicht mehr erforderlich sind (weil später wurden dort Unterverzeichnisse oder Dateien hinzugefügt. Mit großer Source-Trees dieser Platzhalter-Dateien verwalten kann mühsam sein und Fehler anfällig.

Aus diesem Grund habe ich beschlossen, eine Open-Source-Tool zu schreiben, die die Erstellung / Löschung dieser Platzhalter-Dateien automatisch verwalten. Es ist geschrieben für .NET-Plattform und läuft unter Mono (.NET für Linux) und Windows.

haben Sie einen Blick auf: http://code.google.com/p/markemptydirs

Sie können nicht und leider werden nie in der Lage sein. Dies ist eine Entscheidung von Linus Torvalds selbst. Er weiß, was gut für uns ist.

Es gibt einen schimpfen irgendwo da draußen ich einmal gelesen.

Ich fand Re: Leere Verzeichnisse .. , aber vielleicht gibt es ein anderer.

Sie haben mit den Umgehungen leben ... leider.

Ich mag die Antworten von @ Artur79 und @mjs so habe ich eine Kombination aus beidem wurde mit und machte es einen Standard für unsere Projekte.

find . -type d -empty -exec touch {}/.gitkeep \;

Allerdings nur eine Handvoll unserer Entwickler auf Mac oder Linux arbeiten. Viele arbeiten unter Windows und ich kann nicht ein äquivalenten einfachen Einzeiler findet das gleiche dort zu erreichen. Einige hatten das Glück zu haben, Cygwin aus anderen Gründen installiert, aber das Vorschreiben Cygwin nur für diese Overkill schien.

Bearbeiten für eine bessere Lösung

Also, da die meisten unserer Entwickler haben bereits Ant installiert, das erste, was ich gedacht war, legt eine Ant-Build-Datei zusammen dieses von der Plattform unabhängig zu erreichen. Dies kann noch gefunden werden hier

Doch , dachte ich später wäre es besser, diese in einen kleines Programm Befehl zu machen, so dass ich neu erstellt es mit Python und veröffentlichte es auf den PyPI hier . Sie können es installieren, indem Sie einfach ausgeführt werden:

pip3 install gitkeep2

Es erlaubt Ihnen .gitkeep Dateien rekursiv zu erstellen und zu entfernen, und es erlaubt auch Sie Nachrichten, um sie für Ihre Kollegen hinzuzufügen, zu verstehen, warum diese Verzeichnisse wichtig sind. Das letzte Stück ist Bonus. Ich dachte, es wäre schön, wenn die .gitkeep Dateien selbsterklärend sein könnten.

$ gitkeep --help
Usage: gitkeep [OPTIONS] PATH

  Add a .gitkeep file to a directory in order to push them into a Git repo
  even if they're empty.

  Read more about why this is necessary at: https://git.wiki.kernel.org/inde
  x.php/Git_FAQ#Can_I_add_empty_directories.3F

Options:
  -r, --recursive     Add or remove the .gitkeep files recursively for all
                      sub-directories in the specified path.
  -l, --let-go        Remove the .gitkeep files from the specified path.
  -e, --empty         Create empty .gitkeep files. This will ignore any
                      message provided
  -m, --message TEXT  A message to be included in the .gitkeep file, ideally
                      used to explain why it's important to push the specified
                      directory to source control even if it's empty.
  -v, --verbose       Print out everything.
  --help              Show this message and exit.

Ich hoffe, Sie finden es nützlich.

Wenn Sie eine .gitignore Datei hinzufügen, wenn Sie eine Menge von Inhalten in sie setzen wollen (die Sie Git ignorieren möchten) Sie können eine einzige Zeile mit nur einem Stern * hinzufügen wollen sicherstellen, dass Sie dies nicht tun fügen Sie versehentlich den Inhalt ignoriert.

Wie bereits erwähnt ist es nicht möglich ist, leere Verzeichnisse hinzufügen, aber hier ist ein Motto, das für alle Verzeichnisse leer .gitignore Dateien erstellt.

ruby -e 'require "fileutils" ; Dir.glob(["target_directory","target_directory/**"]).each { |f| FileUtils.touch(File.join(f, ".gitignore")) if File.directory?(f) }'

Ich habe dies für den einfachen Zugriff in einem Rakefile stecken.

Die Lösung von Jamie Flournoy großen Werken. Hier ist etwas erweiterte Version des .htaccess zu halten:

# Ignore everything in this directory
*
# Except this file
!.gitignore
!.htaccess

Mit dieser Lösung können Sie sind ein leeren Ordner begehen, zum Beispiel /log, /tmp oder /cache und die Ordner bleiben leer.

Ich baue immer eine Funktion für meine gewünschte Ordnerstruktur zu überprüfen und es für mich im Rahmen des Projektes zu bauen. Dies wird, um dieses Problem, da die leeren Ordner in Git durch einen Bevollmächtigten 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, die meisten Sprachen die gleiche Funktionalität zu unterstützen, und weil die Schaffung der Ordner Pflege durch die Anwendung genommen wird, werden die Ordner immer da sein.

Hier ist ein Hack, aber es ist schon komisch, dass es funktioniert (Git 2.2.1). Ähnlich wie @Teka vorgeschlagen, aber leichter zu merken:

  • Fügen Sie ein Modul in jedem Repository (git submodule add path_to_repo)
  • Dies wird einen Ordner und eine Datei .submodules hinzufügen. Commit eine Änderung.
  • .submodules Datei löschen und die Änderung zu übernehmen.

Nun haben Sie ein Verzeichnis, das erstellt wird, wenn Commit ausgecheckt ist. obwohl eine interessante Sache ist, dass wenn man sich den Inhalt des Baumobjekts dieser Datei Sie erhalten:

  

fatal: Keine gültige Objektnamen   b64338b90b4209263b50244d18278c0999867193

Ich würde nicht ermutigen, es aber zu verwenden, da es in den zukünftigen Versionen von Git arbeiten stoppen kann. Welche Repository beschädigt verlassen kann.

Es gibt keine Möglichkeit Git zu bekommen Verzeichnisse zu verfolgen, so dass die einzige Lösung ist eine Platzhalter-Datei im Verzeichnis hinzuzufügen, die Sie Git verfolgen möchten.

Die Datei mit dem Namen und alles enthalten werden können, die Sie wollen, aber die meisten Leute benutzen eine leere Datei mit dem Namen .gitkeep (obwohl einige Leute die VCS-agnostisch .keep bevorzugen).

Das Präfix . markiert sie als versteckte Datei.

Eine weitere Idee wäre, eine README Datei hinzufügen zu erklären, was wird das Verzeichnis für verwendet werden.

Sie können nicht. Dies ist eine gewollte Design-Entscheidung durch die Git-Maintainer. Grundsätzlich ist der Zweck eines Source Code Management System wie Git ist die Verwaltung Quellcode und leere Verzeichnisse sind nicht Quellcode. Git wird oft auch als Content-Tracker beschrieben, und wieder, leeren Verzeichnisse sind nicht Inhalt (ganz im Gegenteil, tatsächlich), so dass sie nicht verfolgt werden.

Wenn Sie einen Ordner hinzufügen möchten, die eine Menge von transienten Daten in mehreren semantischen Verzeichnisse beherbergen wird, dann ein Ansatz ist, so etwas zu Ihrer Wurzel hinzuzufügen .gitignore ...

/app/data/**/*.* !/app/data/**/*.md

Dann können Sie beschreibende README.md Dateien commit (oder leere Dateien, spielen keine Rolle, solange man sie eindeutig wie bei der *.md in diesem Fall ausrichten kann) in jedem Verzeichnis, um sicherzustellen, dass die Verzeichnisse alle bleiben Teil die Repo aber die Dateien (mit Erweiterungen) werden ignoriert gehalten. EINSCHRÄNKUNGEN: . die in den Verzeichnisnamen nicht erlaubt

Sie können alle diese Verzeichnisse mit xml / Bilder Dateien füllen oder was auch immer und Verzeichnisse unter /app/data/ im Laufe der Zeit als die Speicher für Ihre App benötigt entwickeln (mit den README.md Dateien in einer Beschreibung dessen, was jeder zu verbrennen dienen Speicherverzeichnis ist für genau).

Es ist nicht notwendig, um Ihre .gitignore zu verändern oder dezentralisieren, indem eine neue .gitignore für jedes neues Verzeichnis zu erstellen. Wahrscheinlich nicht die klügste Lösung aber ist knapp gitignore-weise und immer für mich funktioniert. Schön und einfach! ;)

 image description hier

Hinzufügen eine weitere Option in den Kampf.

Angenommen, Sie möchten ein Verzeichnis hinzufügen, dass git, für alle Zwecke zu git Zusammenhang sollten leer bleiben und nie seinen Inhalt verfolgt, ein .gitignore wie hier mehrfach vorgeschlagen, den Trick.

Das Format, wie erwähnt, ist:

*
!.gitignore

Wenn Sie nun einen Weg wollen, dass diese in der Befehlszeile zu tun, auf einen Schlag, während innen 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, das ich diese verwenden zu tun. Nennen Sie das Skript, was Sie whish und entweder fügen Sie es irgendwo in Ihrem Include-Pfad, oder verweisen Sie direkt an:

#!/bin/bash

dir=''

if [ "$1" != "" ]; then
    dir="$1/"
fi

echo "*" > $dir.gitignore && \
echo '!.gitignore' >> $dir.gitignore && \
git add $dir.gitignore

Mit diesem können Sie entweder führen Sie es aus dem Verzeichnis, das Sie hinzufügen möchten, oder das Verzeichnis verweisen, da sie erste und einzige ist Parameter:

$ ignore_dir ./some/directory

Eine andere Möglichkeit (als Antwort auf einen Kommentar von @GreenAsJade), wenn Sie einen leeren Ordner verfolgen, die MAY enthalten verfolgt Dateien in Zukunft werden aber jetzt leer sein, können Sie ommit die * aus der .gitignore-Datei und überprüfen , die in. im Grunde genommen die ganze Datei sagt, ist „nicht ignorieren ich “, aber ansonsten das Verzeichnis leer ist und verfolgt .

Ihre .gitignore Datei würde wie folgt aussehen:

!.gitignore

Das ist es, überprüfen Sie, dass in, und Sie haben ein leeres, noch verfolgt, Verzeichnis, das Sie Dateien in zu einem späteren Zeitpunkt verfolgen können.

Der Grund schlage ich vor, dass man hält Zeile in der Datei ist, dass es den .gitignore Zweck gibt. Andernfalls kann jemand auf der ganzen Linie denken, es zu entfernen. Es kann helfen, wenn Sie über der Zeile einen Kommentar platzieren.

Manchmal muss man mit schlecht geschriebenen Bibliotheken oder Software beschäftigen, die ein „echtes“ leer und bestehendes Verzeichnis benötigen. ein einfaches .gitignore oder .keep Putting könnte sie brechen und einen Fehler verursachen. Im Folgenden könnte in diesen Fällen helfen, aber keine Garantie ...

Erstellen Sie zunächst das benötigte Verzeichnis:

mkdir empty

Dann fügen Sie einen gebrochenen symbolischen Link zu diesem Verzeichnis (aber auf einem anderen Fall als in dem Fall beschrieben Verwendung oben, wählen Sie bitte eine README mit einer Erklärung verwenden):

ln -s .this.directory empty/.keep

Um Dateien in diesem Verzeichnis zu ignorieren, können Sie es in Ihrem Stamm .gitignore hinzufügen:

echo "/empty" >> .gitignore

Um die ignoriert Datei hinzuzufügen, verwenden Sie einen Parameter zu erzwingen:

git add -f empty/.keep

Nach dem Commit Sie haben einen gebrochenen symbolischen Link in Ihrem Index und git erstellt das Verzeichnis. Die unterbrochene Verbindung hat einige Vorteile, da es keine reguläre Datei ist und verweist auf keine reguläre Datei. So ist es auch mit dem Teil der Frage paßt „(enthält keine Dateien)“, nicht von der Absicht, sondern durch die Bedeutung, ich denke:

find empty -type f

Dieser Befehl zeigt ein leeres Ergebnis, da keine Dateien in diesem Verzeichnis vorhanden sind. So ist die meisten Anwendungen, die in einem Verzeichnis alle Dateien erhalten in der Regel nicht auf diesen Link sehen, zumindest, wenn sie eine tun „Datei vorhanden“ oder ein „lesbar“. Auch wird nicht einige Skripte gibt keine Dateien finden:

$ php -r "var_export(glob('empty/.*'));"
array (
  0 => 'empty/.',
  1 => 'empty/..',
)

Aber ich stark diese Lösung empfehlen nur unter besonderen Umständen zu verwenden, eine gute schriftliche README in ein leeres Verzeichnis ist in der Regel eine bessere Lösung. (Und ich weiß nicht, ob das mit einem Windows-Dateisystem arbeitet ...)

Sie können diesen Code als create_readme.php speichern und der PHP Code aus dem Stammverzeichnis ausführen Ihr Git-Projekt.

> php create_readme.php

Es wird Readme-Dateien in alle Verzeichnisse hinzufügen, die leer sind, so würden diese Verzeichnisse dann in den Index aufgenommen werden.

<?php
    $path = realpath('.');
    $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path),       RecursiveIteratorIterator::SELF_FIRST);
    foreach($objects as $name => $object){
        if ( is_dir($name) && ! is_empty_folder($name) ){
            echo "$name\n" ;
            exec("touch ".$name."/"."README");
        }
    }

    function is_empty_folder($folder) {
        $files = opendir($folder);
        while ($file = readdir($files)) {
            if ($file != '.' && $file != '..')
                return true; // Not empty
            }
        }
?>

Dann tun

git commit -m "message"
git push

Manchmal habe ich Repositories mit Ordnern, die nur jemals in Betracht gezogen enthalten Dateien „Inhalt“ sein -Das ist, sind sie nicht Dateien, die ich über das Sein versioniert kümmern, und deshalb nie begangen werden soll. Mit Git .gitignore-Datei können Sie ganze Verzeichnisse ignorieren. Aber es gibt Zeiten, wenn Sie den Ordner, in dem Repo, die von Vorteil wäre. Hier ist eine hervorragende Lösung, um diese Notwendigkeit erreichen.

Was ich in der Vergangenheit getan, um eine .gitignore Datei an der Wurzel meines Repo gesetzt wird, und dann den Ordner ausschließen, etwa so:

/app/some-folder-to-exclude
/another-folder-to-exclude/*

Allerdings sind diese Ordner dann nicht Teil des Repo werden. Sie könnten dort so etwas wie eine Readme-Datei hinzuzufügen. Aber dann müssen Sie Ihre Anwendung sagen, nicht über die Verarbeitung keine Readme-Dateien zu kümmern.

Wenn Ihre App für die Ordner hängt dort zu sein (obwohl leer), können Sie einfach eine .gitignore Datei in den Ordner in Frage hinzufügen, und verwenden Sie es, zwei Ziele zu erreichen:

Bitte geben Sie Git gibt es eine Datei in dem Ordner, die Git es den Repo hinzufügen macht. Sagen Sie Git den Inhalt dieses Ordners zu ignorieren, minus diese Datei selbst. Hier ist die .gitignore Datei in Ihren leeren Verzeichnissen zu setzen:

*
!.gitignore

Die erste Zeile (*) erzählt Git alles in diesem Verzeichnis zu ignorieren. Die zweite Zeile gibt Git nicht die .gitignore Datei zu ignorieren. Sie können diese Datei in alle leeren Ordner stopfen Sie zum Repository hinzugefügt werden sollen.

Eine einfache Möglichkeit, dies zu tun ist durch eine .gitkeep Datei in das Verzeichnis Hinzufügen Sie möchten (derzeit) halten leer.

Sehen Sie diese für weitere Informationen beantworten SOF - was auch erklärt, warum manche Leute finden, die konkurrierende Konvention eine .gitignore des Hinzufügens Datei (wie in vielen Antworten angegeben hier) verwirrend.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top