2121 Stimmen

Wie kann ich nur ein Unterverzeichnis eines Git-Repositorys klonen?

Ich habe mein Git-Repository, das im Stammverzeichnis zwei Unterverzeichnisse hat:

/finisht
/static

Als dies der Fall war SVN , /finisht wurde an einem Ort ausgecheckt, während /static wurde an anderer Stelle überprüft, etwa so:

svn co svn+ssh://admin@domain.com/home/admin/repos/finisht/static static

Gibt es eine Möglichkeit, dies mit Git zu tun?

18 Stimmen

Mögliche Duplikate von Unterverzeichnisse in Git auschecken?

2 Stimmen

Für einen Nutzer des Jahres 2014, was die git clone einfachsten Befehl? Ich habe este einfache Antwort . Wenn es etwas mehr einfach, bitte kommentieren

1 Stimmen

Für diejenigen, die versuchen, den Inhalt des Repositorys zu klonen (und nicht den Root-Ordner zu erstellen), ist dies eine sehr einfache Lösung: stackoverflow.com/questions/6224626/

11voto

Abdul97j Punkte 39

Bei mir hat es funktioniert (Git-Version 2.35.1).

git init
git remote add origin <YourRepoUrl>
git config core.sparseCheckout true
git sparse-checkout set <YourSubfolderName>
git pull origin <YourBranchName>

0 Stimmen

Es scheint, dass dies der schnellste und kürzeste Weg ist.

11voto

BARJ Punkte 1165

Dadurch wird ein bestimmter Ordner geklont und der gesamte Verlauf, der sich nicht auf ihn bezieht, entfernt.

git clone --single-branch -b {branch} git@github.com:{user}/{repo}.git
git filter-branch --subdirectory-filter {path/to/folder} HEAD
git remote remove origin
git remote add origin git@github.com:{user}/{new-repo}.git
git push -u origin master

2 Stimmen

Hier sind die Drachen. Du wirst begrüßt von WARNUNG: git-filter-branch hat eine Fülle von Problemen, die zu fehlerhaften History-Rewrites führen . Dann wird die git-filter-branch dokumente hat eine ziemlich lange Warnliste.

10voto

david_adler Punkte 7126

Ich habe gerade ein Skript geschrieben für GitHub .

Uso:

python get_git_sub_dir.py path/to/sub/dir <RECURSIVE>

14 Stimmen

Zu Ihrer Information: Das ist für GitHub nur.

11 Stimmen

Und offensichtlich ist dies für Herunterladen von ein Verzeichnis, nicht Klonen ein Teil eines Repo mit all seinen Metadaten... richtig?

15 Stimmen

Sie sollten Ihren Code hier einfügen und nicht irgendwo anders.

7voto

Nasir Iqbal Punkte 887

Sie verwenden Linux? Und Sie wollen nur einen leicht zugänglichen und sauberen Arbeitsbaum ? ohne den Rest des Codes auf Ihrem Rechner zu stören. Symlinks !

git clone https://github.com:{user}/{repo}.git ~/my-project
ln -s ~/my-project/my-subfolder ~/Desktop/my-subfolder

Test

cd ~/Desktop/my-subfolder
git status

7voto

Everett Punkte 6075

Nur um einige der großartigen Antworten hier zu verdeutlichen: Die in vielen Antworten beschriebenen Schritte setzen voraus, dass Sie bereits irgendwo ein Remote-Repository haben.

Gegeben: ein bestehendes Git-Repository, z. B. git@github.com:some-user/full-repo.git mit einem oder mehreren Verzeichnissen, auf die Sie zugreifen möchten unabhängig des Restes des Repo, z.B. Verzeichnisse mit dem Namen app1 y app2

Angenommen, Sie haben ein Git-Repository wie das oben genannte...

Dann: können Sie Schritte wie die folgenden ausführen, um nur bestimmte Verzeichnisse aus diesem größeren Repo:

mkdir app1
cd app1
git init
git remote add origin git@github.com:some-user/full-repo.git
git config core.sparsecheckout true
echo "app1/" >> .git/info/sparse-checkout
git pull origin master

Ich hatte fälschlicherweise gedacht, dass die Sparse-Checkout-Optionen im ursprünglichen Repository gesetzt werden müssen, aber das ist nicht der Fall: Sie definieren die Verzeichnisse, die Sie lokal haben wollen, bevor Sie sie aus dem entfernten Repository ziehen. Das entfernte Repository weiß nicht, dass Sie nur einen Teil des Repositorys verfolgen wollen und kümmert sich auch nicht darum.

Ich hoffe, diese Klarstellung hilft jemandem weiter.

0 Stimmen

Dies ist ein bisschen spät, aber was mache ich, wenn ich alle Inhalte innerhalb app1 und nicht das app1-Verzeichnis brauche

0 Stimmen

Das scheint eher eine kosmetische Frage zu sein, auch wenn es den Anschein hat, dass Sie nicht die volle Freiheit haben, der Struktur der ursprünglichen Repo zu "entkommen". Vielleicht könnten Sie Symlinks verwenden?

0 Stimmen

Man muss immer noch das gesamte Repo herunterladen, wie es scheint ``` $ mkdir com.unity.render-pipelines.core $ cd com.unity.render-pipelines.core/ $ git init $ git remote add origin github.com/Oculus-VR/Unity-Graphics.git $ git config core.sparsecheckout true $ echo "com.unity.render-pipelines.core/" >> .git/info/sparse-checkout $ git pull origin 2021.2/oculus-appsw-particles ``` Die Ordnergröße beträgt ca. 7mb , allerdings ... ``` $ ... $ Empfangene Objekte: 6% (24305/375290), 27.30 MiB | 121.00 KiB/s ````

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