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?

4voto

Jörg W Mittag Punkte 349574

Das können Sie nicht. Dies ist eine bewusste Entscheidung der Git-Maintainer. Grundsätzlich besteht der Zweck eines Quellcodeverwaltungssystems wie Git in der Verwaltung von Quellcode, und leere Verzeichnisse sind kein Quellcode. Git wird auch oft als Content-Tracker beschrieben, und auch hier sind leere Verzeichnisse kein Inhalt (ganz im Gegenteil), also werden sie nicht verfolgt.

4voto

Einfach leer hinzufügen (ohne Inhalt) .gitignore Datei in dem leeren Verzeichnis, das Sie verfolgen wollen.

Wenn Sie z.B. leere Verzeichnisse verfolgen wollen /project/content/posts dann eine neue leere Datei erstellen /project/content/posts/.gitignore

Hinweis: .gitkeep ist nicht Teil der offiziellen git :

enter image description here

3voto

aball Punkte 46

Zur Erweiterung von Jamie Flournoys Lösung zu einem Verzeichnisbaum hinzufügen, können Sie diese .gitignore in das oberste Verzeichnis legen und touch .keepdir in jedem Unterverzeichnis, das Git verfolgen soll. Alle anderen Dateien werden ignoriert. Dies ist nützlich, um eine einheitliche Struktur für Build-Verzeichnisse zu gewährleisten.

# Ignore files but not directories. * matches both files and directories
# but */ matches only directories. Both match at every directory level
# at or below this one.
*
!*/

# Git doesn't track empty directories, so track .keepdir files, which also 
# tracks the containing directory. 
!.keepdir

# Keep this file and the explanation of how this works
!.gitignore
!Readme.md

2voto

Rahul Sinha Punkte 1751

Manchmal habe ich Repositorys mit Ordnern, die nur Dateien enthalten, die ich als "Inhalt" betrachte, d. h. Dateien, deren Versionierung mir nicht wichtig ist und die daher nie übertragen werden sollten. Mit der .gitignore-Datei von Git können Sie ganze Verzeichnisse ignorieren. Es gibt jedoch Situationen, in denen es von Vorteil wäre, den Ordner im Projektarchiv zu haben. Hier ist eine ausgezeichnete Lösung für diese Anforderung.

Was ich in der Vergangenheit getan habe, ist eine .gitignore Datei im Root meiner Repo, und schließen Sie dann den Ordner, wie so:

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

Allerdings werden diese Ordner dann nicht Teil des Repo. Sie könnten dort so etwas wie eine README-Datei hinzufügen. Aber dann müssen Sie Ihrer Anwendung sagen, dass sie sich nicht um die Verarbeitung von README-Dateien kümmern soll.

Wenn Ihre Anwendung davon abhängt, dass die Ordner vorhanden (wenn auch leer) sind, können Sie einfach eine .gitignore-Datei zu dem betreffenden Ordner hinzufügen und damit zwei Ziele erreichen:

Sagen Sie Git, dass sich in dem Ordner eine Datei befindet, damit Git sie zum Projektarchiv hinzufügt. Sagen Sie Git, dass es den Inhalt dieses Ordners ignorieren soll, abzüglich der Datei selbst. Hier ist die .gitignore-Datei, die Sie in Ihre leeren Verzeichnisse einfügen:

*
!.gitignore

Die erste Zeile (*) weist Git an, alles in diesem Verzeichnis zu ignorieren. Die zweite Zeile sagt Git, dass es die Datei .gitignore nicht ignorieren soll. Sie können diese Datei in jeden leeren Ordner einfügen, den Sie dem Repository hinzufügen möchten.

2voto

user665190 Punkte 47

Sie können diesen Code als create_readme.php speichern und die PHP Code aus dem Root-Verzeichnis Ihres Git-Projekts.

> php create_readme.php

Es fügt README-Dateien zu allen Verzeichnissen hinzu, die leer sind, so dass 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

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