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




create on (24)

Hier ist ein Hack, aber es ist lustig, dass es funktioniert (Git 2.2.1). Ähnlich dem, was @Teka vorschlug, aber leichter zu merken:

  • Hinzufügen eines Submoduls zu einem beliebigen Repository ( git submodule add path_to_repo)
  • Dadurch werden ein Ordner und eine Datei hinzugefügt .submodules. Änderung vornehmen
  • .submodulesDatei löschen und die Änderung übernehmen.

Jetzt haben Sie ein Verzeichnis, das beim Auschecken von Commit erstellt wird. Eine interessante Sache ist jedoch, dass wenn Sie sich den Inhalt des Baumobjekts dieser Datei ansehen, erhalten Sie:

fatal: Kein gültiger Objektname b64338b90b4209263b50244d18278c0999867193

Ich würde es jedoch nicht ermutigen, es zu verwenden, da es in zukünftigen Versionen von Git möglicherweise nicht mehr funktioniert. Dadurch kann Ihr Repository beschädigt werden.

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


Ich baue immer eine Funktion, um nach meiner gewünschten Ordnerstruktur zu suchen und sie innerhalb des Projekts für mich zu erstellen. Dies umgeht dieses Problem, da die leeren Ordner vom Proxy 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 dieselbe Funktionalität unterstützen. Da die Erstellung der Ordner von der Anwendung übernommen wird, sind die Ordner immer dort.


Du kannst nicht Siehe die Git-FAQ .

Derzeit erlaubt das Design des Git-Index (Staging-Bereich) nur das Auflisten von Dateien, und niemand, der die Änderung vornehmen kann, um leere Verzeichnisse zuzulassen, hat sich um diese Situation ausreichend gekümmert, um Abhilfe zu schaffen.

Verzeichnisse werden beim Hinzufügen von Dateien automatisch hinzugefügt. Das heißt, Verzeichnisse müssen niemals zum Repository hinzugefügt werden und werden nicht eigenständig verfolgt.

Sie können " git add <dir> " sagen und es werden dort Dateien hinzugefügt.

Wenn Sie wirklich ein Verzeichnis benötigen, das in Checkouts vorhanden ist, sollten Sie darin eine Datei erstellen. .gitignore funktioniert gut für diesen Zweck; Sie können es leer lassen oder die Namen der Dateien eingeben, von denen Sie erwarten, dass sie im Verzeichnis angezeigt werden.


Es gibt keine Möglichkeit, Git zum Verfolgen von Verzeichnissen zu veranlassen. Daher besteht die einzige Lösung darin, eine Platzhalterdatei in dem Verzeichnis hinzuzufügen, das Git verfolgen soll.

Die Datei kann beliebig benannt werden und enthält alles, was Sie möchten. Die meisten Benutzer verwenden jedoch eine leere Datei mit dem Namen .gitkeep(obwohl einige Benutzer die VCS-Agnostic bevorzugen .keep).

Das Präfix .markiert es als versteckte Datei.

Eine andere Idee wäre, eine READMEDatei hinzuzufügen , die erklärt, wofür das Verzeichnis verwendet wird.


Andy Lester hat Recht, aber wenn Ihr Verzeichnis nur leer und nicht leer sein muss, können Sie eine leere .gitignore Datei als Umgehungslösung .gitignore .

Abgesehen davon ist dies ein Implementierungsproblem und kein grundlegendes Git-Speicherdesignproblem. Wie schon oft in der Git-Mailing-Liste erwähnt wurde, wurde dies nicht implementiert, weil sich niemand darum gekümmert hat, einen Patch einzureichen, nicht, dass er dies nicht tun könnte oder sollte.


Erstellen Sie eine leere Datei mit dem Namen .gitkeep im Verzeichnis, und fügen Sie diese hinzu.


Das kann und kann ich leider nicht. Dies ist eine Entscheidung, die Linus Torvald selbst getroffen hat. Er weiß, was für uns gut ist.

Irgendwo da draußen, wo ich einmal gelesen habe, gibt es ein Wort.

Ich habe Re: Leere Verzeichnisse gefunden .. , aber vielleicht gibt es noch ein anderes.

Sie müssen mit den Problemumgehungen leben ... leider.


Die Lösung von Jamie Flournoy funktioniert großartig. Hier ist eine etwas verbesserte Version, um das zu behalten .htaccess:

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

Mit dieser Lösung können Sie einen leeren Ordner, zum Beispiel begehen /log, /tmpoder /cacheund der Ordner leer bleiben.


Du kannst nichtDies ist eine beabsichtigte Entwurfsentscheidung der Git-Betreuer. Grundsätzlich dient ein Quellcode-Verwaltungssystem wie Git dazu, Quellcode zu verwalten, und leere Verzeichnisse sind kein Quellcode. Git wird auch oft als Content-Tracker bezeichnet. Leere Verzeichnisse sind auch nicht Inhalt (im Gegenteil), also werden sie nicht verfolgt.


Sie können immer eine README-Datei in das Verzeichnis aufnehmen, in der erläutert wird, warum Sie dieses sonst leere Verzeichnis im Repository haben möchten.


Sie können diesen Code als create_readme.php speichern und den PHP Code im Stammverzeichnis Ihres Git-Projekts ausführen.

> php create_readme.php

Alle leeren Verzeichnisse werden mit README-Dateien versehen. Diese Verzeichnisse werden dann dem Index hinzugefügt.

<?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 mach

git commit -m "message"
git push

Wie in anderen Antworten beschrieben, kann Git keine leeren Verzeichnisse in seinem Bereitstellungsbereich darstellen. (Siehe Git-FAQ .) Wenn ein Verzeichnis für Ihre Zwecke jedoch leer genug ist, wenn es nur eine .gitignore Datei enthält, können Sie .gitignore Dateien nur in leeren Verzeichnissen erstellen.

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

Manchmal habe ich Repositorys mit Ordnern, die immer nur Dateien enthalten, die als "Inhalt" betrachtet werden. Das sind also keine Dateien, die mir wichtig sind, wenn sie versioniert werden, und sollten daher niemals festgeschrieben werden. Mit der .gitignore-Datei von Git können Sie ganze Verzeichnisse ignorieren. Es gibt jedoch Zeiten, in denen ein Ordner im Repo von Vorteil wäre. Hier ist eine hervorragende Lösung, um dieses Bedürfnis zu erfüllen.

Was ich in der Vergangenheit getan habe, ist, eine .gitignore -Datei in das Stammverzeichnis meines Repos zu setzen und dann den Ordner auszuschließen, wie dies zutrifft:

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

Diese Ordner werden jedoch nicht Teil des Repos. Sie könnten dort etwas wie eine README-Datei hinzufügen. Dann müssen Sie jedoch Ihrer Anwendung mitteilen, dass sie sich nicht um die Verarbeitung von README-Dateien kümmern muss.

Wenn Ihre App davon abhängig ist, ob die Ordner vorhanden sind (obwohl leer), können Sie dem betreffenden Ordner einfach eine .gitignore-Datei hinzufügen und zwei Ziele erreichen:

Sagen Sie Git, dass sich im Ordner eine Datei befindet, die Git zum Repo hinzufügt. Bitten Sie Git, den Inhalt dieses Ordners zu ignorieren, abzüglich dieser Datei. Hier ist die .gitignore-Datei, die Sie in Ihre leeren Verzeichnisse einfügen können:

*
!.gitignore

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


Ich mag die Antworten von @ Artur79 und @mjs, also habe ich eine Kombination aus beiden verwendet und sie zu einem Standard für unsere Projekte gemacht.

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

Allerdings arbeiten nur wenige unserer Entwickler auf Mac oder Linux. Viel Arbeit unter Windows und ich konnte keinen gleichwertigen Ein-Liner finden, um das gleiche zu erreichen. Einige hatten das Glück, Cygwin aus anderen Gründen installiert zu haben , aber die Verschreibung von Cygwin schien nur übertrieben zu sein.

Da die meisten unserer Entwickler bereits Ant installiert haben, habe ich eine Build-Datei erstellt, um dies unabhängig von der Plattform zu erreichen.

<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="Gitkeep" basedir="." default="keep">
    <!--Apply to all subdirs of this dir-->
    <target name="keep" description="-> Add a .gitkeep file to all empty subdir's of this dir.">

        <!--Create a ref to all the subdirs in the tree of this dir-->
        <dirset id="dirs.ref" dir="./" includes="**/*"/>
        <!--Create a list of the subdirs under this dir-->
        <property name="dirs.list" refid="dirs.ref" />

        <!--For each subdir-->
        <for list="${dirs.list}" delimiter=";" param="dir">
            <sequential>
                <!--If the subdir is empty this target will add a .gitkeep file to it-->
                <antcall target="gitkeep" inheritall="false">
                    <param name="dir" value="@{dir}"/>
                </antcall>
            </sequential>
        </for>
    </target>

    <!--Add a .gitkeep file to a directory if it's empty-->
    <target name="gitkeep" description="-> Add a .gitkeep file to a specific subdir of this dir. Use -Ddir=relative/path/to/dir">

        <!--Create a ref of the files inside this dir-->
        <fileset dir="${dir}" id="contents.ref"/>

        <!--Create a path to the contents of this directory, ONLY if it's not empty-->
        <pathconvert refid="contents.ref" property="contents.path" setonempty="false"/>

        <if>
            <!--If the dir is empty create the .gitkeep file-->
            <not><isset property="contents.path"/></not>
            <then>
                <!--Create the .gitkeep file-->
                <echo message="Version this dir in Git even if its empty." file="./${dir}/.gitkeep" force="true" append="false"/>
            </then>
        </if>
    </target>
</project>

Jetzt kann ich einfach rennen

ant -f gitkeep.xml

Und dies erstellt eine .gitkeep-Datei in einem leeren Unterverzeichnis. Sogar unter Windows :) Hinweis: Für diese Builddatei ist die Ant Contrib- Dose erforderlich .

Ich arbeite here weiter an diesem Konzept .

here


Ich habe das Problem auch mit leeren Verzeichnissen konfrontiert. Das Problem bei der Verwendung von Platzhalter-Dateien besteht darin, dass Sie sie erstellen und löschen müssen, wenn sie nicht mehr erforderlich sind (weil später Unterverzeichnisse oder Dateien hinzugefügt wurden. Bei der Verwaltung großer Platzbäume können diese Platzhalter-Dateien umständlich und fehlerhaft sein.) anfällig.

Aus diesem Grund habe ich mich entschlossen, ein Open Source-Tool zu schreiben, mit dem das Erstellen / Löschen solcher Platzhalter-Dateien automatisch verwaltet werden kann. Es ist für die .NET-Plattform geschrieben und läuft unter Mono (.NET für Linux) und Windows.

Schauen Sie einfach unter http://code.google.com/p/markemptydirs


Git verfolgt keine leeren Verzeichnisse. Weitere Informationen finden Sie in den Git-FAQs . Die empfohlene Problemumgehung besteht darin, eine .gitignore Datei im leeren Verzeichnis .gitignore . .gitignore Lösung gefällt mir nicht, da der .gitignore von der Unix-Konvention "versteckt" wird. Es gibt auch keine Erklärung, warum die Verzeichnisse leer sind.

Ich schlage vor, eine README-Datei in das leere Verzeichnis zu legen und zu erklären, warum das Verzeichnis leer ist und warum es in Git verfolgt werden muss. Wenn die README-Datei vorhanden ist, ist das Verzeichnis für Git nicht mehr leer.

Die eigentliche Frage ist, warum braucht man das leere Verzeichnis in git? Normalerweise haben Sie eine Art Build-Skript, das das leere Verzeichnis vor dem Kompilieren / Ausführen erstellen kann. Wenn nicht, dann mach einen. Das ist eine weitaus bessere Lösung als leere Verzeichnisse in git zu setzen.

Sie haben also einen Grund, warum Sie ein leeres Verzeichnis in git benötigen. Setzen Sie diesen Grund in die README-Datei. Auf diese Weise wissen andere Entwickler (und zukünftig Sie), warum das leere Verzeichnis vorhanden sein muss. Sie werden auch wissen, dass Sie das leere Verzeichnis entfernen können, wenn das Problem behoben wurde, das ein leeres Verzeichnis erfordert.

Verwenden Sie den folgenden Befehl, um jedes leere Verzeichnis aufzulisten:

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

So erstellen Sie Platzhalter-READMEs in jedem leeren Verzeichnis:

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

Um alles im Verzeichnis außer der README-Datei zu ignorieren, .gitignore die folgenden Zeilen in Ihr .gitignore :

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

Alternativ können Sie einfach jede README-Datei von der Ignorierung ausschließen:

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

So listen Sie jedes README auf, nachdem es bereits erstellt wurde:

find -name README.emptydir

WARNUNG: Diese Optimierung funktioniert nicht wirklich, wie sich herausstellt. Entschuldigung für die Unannehmlichkeiten.

Originalbeitrag unten:

Ich habe beim Spielen mit Git-Interna eine Lösung gefunden!

  1. Angenommen, Sie befinden sich in Ihrem Repository.
  2. Erstellen Sie ein leeres Verzeichnis:

    $ mkdir path/to/empty-folder
    
  3. Fügen Sie es mit einem Installationsbefehl und dem leeren Baum SHA-1 zum Index hinzu:

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

    Geben Sie den Befehl ein und geben Sie die zweite Zeile ein. Drücken Sie die Eingabetaste und dann Strg + D, um Ihre Eingabe zu beenden. Hinweis: Das Format ist der Modus [SPACE] -Typ [SPACE] SHA-1hash [TAB] (der Tab ist wichtig, die Antwortformatierung behält ihn nicht bei).

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

Diese Lösung ist kurz und funktioniert anscheinend gut ( siehe EDITIEREN! ), Aber es ist nicht so leicht zu merken ...

Der leere Baum SHA-1 kann gefunden werden, indem ein neues leeres Git-Repository erstellt wird, cd hinein und der git write-tree , der den leeren Baum SHA-1 ausgibt.

BEARBEITEN:

Ich verwende diese Lösung, seit ich sie gefunden habe. Es scheint genau so zu funktionieren wie das Erstellen eines Submoduls, nur dass an keiner Stelle ein Modul definiert ist. Dies führt zu Fehlern bei der Ausgabe von git submodule init|update . Das Problem ist, dass git update-index den 040000 tree in den 160000 commit umschreibt.

Außerdem wird jede unter diesem Pfad platzierte Datei von Git nicht bemerkt, da sie der Meinung ist, dass sie zu einem anderen Repository gehört. Dies ist unangenehm, da es leicht übersehen werden kann!

Wenn Sie jedoch nicht bereits Git-Submodule in Ihrem Repository verwenden (und auch nicht verwenden) und der "leere" Ordner leer bleibt oder wenn Sie möchten, dass Git von seiner Existenz erfährt und dessen Inhalt ignoriert, können Sie dies tun dieser Tweak. Um mit Submodulen den üblichen Weg zu gehen, sind mehr Schritte erforderlich, als dies der Fall ist.


Wenn Sie eine .gitignore Datei hinzufügen, und wenn Sie eine beliebige Menge Inhalt .gitignore (die Git ignorieren soll), möchten Sie möglicherweise eine einzelne Zeile mit einem Sternchen * hinzufügen, um sicherzustellen, dass Sie keine Inhalte wurden versehentlich ignoriert.


So erstellen Sie Ruby on Rails- Protokollordner:

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

Nun wird das Protokollverzeichnis in die Baumstruktur aufgenommen. Es ist sehr nützlich bei der Bereitstellung, sodass Sie keine Routine schreiben müssen, um Protokollverzeichnisse zu erstellen.

Die Logfiles können durch Ausgabe herausgehalten werden,

echo log/dev.log >> .gitignore

Aber das wussten Sie wahrscheinlich.


Warum brauchen wir leere versionierte Ordner

Das wichtigste zuerst:

Ein leeres Verzeichnis kann nicht Teil eines Baums unter dem Git-Versionssystem sein .

Es wird einfach nicht verfolgt. Es gibt jedoch Szenarien, in denen "Versionierung" leerer Verzeichnisse nützlich sein kann, zum Beispiel:

  • eine vordefinierte Ordnerstruktur einrichten und diese Struktur jedem Benutzer / Mitwirkenden des Repositorys zur Verfügung stellen; oder, als Spezialfall der obigen .gitignore , das Erstellen eines Ordners für temporäre Dateien , wie zum Beispiel cache/ oder logs/ .gitignore , in dem der Ordner, jedoch .gitignore dessen Inhalt .gitignore
  • In Bezug auf den Überblick funktionieren einige Projekte nicht ohne einige Ordner (was oft ein Hinweis auf ein schlecht entworfenes Projekt ist, aber es ist ein häufiges reales Szenario und möglicherweise gibt es möglicherweise Berechtigungsprobleme).

Einige empfohlene Problemumgehungen

Viele Benutzer empfehlen:

  1. Platzieren einer README Datei oder einer anderen Datei mit etwas Inhalt, um das Verzeichnis nicht leer zu machen, oder
  2. Erstellen einer .gitignore Datei mit einer Art "umgekehrter Logik" (dh, um alle Dateien .gitignore ), die am Ende den gleichen Zweck der Annäherung # 1 .gitignore .

Während beide Lösungen sicherlich funktionieren, finde ich sie mit einer sinnvollen Herangehensweise an die Git-Versionierung nicht konsistent.

  • Warum sollten Sie falsche Dateien oder READMEs einfügen, die Sie möglicherweise nicht in Ihrem Projekt haben möchten?
  • Warum sollten Sie .gitignore , um etwas (das Aufbewahren von Dateien) .gitignore , das .gitignore das Gegenteil von dem ist, für das es gedacht ist (mit Ausnahme von Dateien), obwohl dies möglich ist?

.gitkeep Ansatz

Verwenden Sie eine leere Datei mit dem Namen .gitkeep , um die Anwesenheit des Ordners im Versionierungssystem zu erzwingen.

Obwohl es vielleicht keinen so großen Unterschied gibt:

  • Sie verwenden eine Datei mit dem einzigen Zweck, den Ordner zu behalten. Sie geben dort keine Informationen an, die Sie nicht hinzufügen möchten.

    Beispielsweise sollten Sie READMEs als READMEs mit nützlichen Informationen verwenden, nicht als Entschuldigung, um den Ordner zu behalten.

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

  • Die Benennung .gitkeep macht es aus dem Dateinamen selbst (und auch für andere Entwickler , was für ein gemeinsames Projekt und eine der .gitkeep eines Git-Repositorys ist) sehr klar und unkompliziert, dass es sich um diese Datei handelt

    • Eine Datei, die nicht mit dem Code zusammenhängt (aufgrund des führenden Punkts und des Namens)
    • Eine Datei, die eindeutig mit Git zusammenhängt
    • Sein Zweck ( Keep ) ist klar angegeben und konsistent und in seiner Bedeutung semantisch zu ignorieren

Annahme

Ich habe gesehen, wie .gitkeep von sehr wichtigen Frameworks wie Laravel und Angular-CLI .


Hinzufügen einer weiteren Option zum Kampf.

Angenommen, Sie möchten zu gitdiesem Zweck ein Verzeichnis hinzufügen, das für alle damit verbundenen Zwecke gitleer bleiben sollte und niemals dessen Inhalt verfolgt werden soll. Dies wird, .gitignorewie hier schon mehrmals vorgeschlagen , als Trick ausgeführt.

Das Format ist wie erwähnt:

*
!.gitignore

Wenn Sie eine Möglichkeit haben möchten, dies über die Befehlszeile zu tun, können Sie auf einen Schlag innerhalb des Verzeichnisses, das Sie hinzufügen möchten, Folgendes ausführen:

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

Ich selbst habe ein Shell-Skript, das ich dazu benutze. Benennen Sie das Skript, wie Sie möchten, und fügen Sie es entweder 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 innerhalb des Verzeichnisses ausführen, das Sie hinzufügen möchten, oder das Verzeichnis als ersten und einzigen Parameter referenzieren:

$ ignore_dir ./some/directory

Eine weitere Option (in Reaktion auf einen Kommentar von @GreenAsJade), wenn Sie einen leeren Ordner verfolgen mögen , die MAI - Dateien in der Zukunft enthält , verfolgt, aber jetzt leer sein, können Sie die ommit *aus der .gitignoreDatei, und prüfen Sie, dass in. Im Grunde sagt die Datei nur "Ignoriere mich nicht ", aber ansonsten ist das Verzeichnis leer und wird verfolgt.

Ihre .gitignoreDatei würde folgendermaßen aussehen:

!.gitignore

Das ist es, checken Sie das ein und Sie haben ein leeres, aber nachverfolgtes Verzeichnis, in dem Sie Dateien zu einem späteren Zeitpunkt nachverfolgen können.

Ich schlage vor, diese eine Zeile in der Datei zu behalten, weil sie den .gitignoreZweck hat. Andernfalls könnte jemand in der Leitung denken, es zu entfernen. Es kann hilfreich sein, wenn Sie einen Kommentar oberhalb der Zeile platzieren.


Das Hinzufügen eines leeren Verzeichnisses scheint der Pfad des geringsten Widerstandes zu sein, da Sie über Skripts verfügen, die das Verzeichnis als vorhanden betrachten (möglicherweise weil es ein Ziel für generierte Binärdateien ist). Ein anderer Ansatz wäre, Ihre Skripts so zu ändern, dass das Verzeichnis nach Bedarf erstellt wird .

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 einen (defekten) symbolischen Link zum Verzeichnis einchecken, sodass Sie ohne das Präfix ".generated" darauf zugreifen können (dies ist jedoch optional).

ln -sf .generated/bin bin
git add bin

Wenn Sie Ihren Quellbaum bereinigen möchten, können Sie einfach:

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

Wenn Sie den oft vorgeschlagenen Ansatz des Eincheckens in einem fast leeren Ordner anwenden, haben Sie die geringere Komplexität, den Inhalt zu löschen, ohne auch die Datei ".gitignore" zu löschen.

Sie können alle generierten Dateien ignorieren, indem Sie Folgendes in Ihrem Root-.gitignore hinzufügen:

.generated

Angenommen, Sie benötigen 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, Sie müssen die .gitignore-Datei zum Index hinzufügen, bevor Sie Git sagen können, dass er sie ignoriert (und alles andere im leeren Verzeichnis).


Ein anderer Ansatz ist

git push --prune origin

WARNUNG: Dadurch werden alle entfernten Zweigstellen gelöscht, die nicht lokal vorhanden sind. Oder umfassender

git push --mirror

bewirkt, dass das entfernte Repository wie die lokale Kopie des Repositorys aussieht (lokale Heads, Remotes und Tags werden auf Remote gespiegelt).





git directory git-add