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/

1voto

Mike Slinn Punkte 6880

Viele gute Ideen und Skripte oben. Ich konnte nicht anders und habe sie in einem Bash-Skript mit Hilfe und Fehlerprüfung zusammengefasst:

#!/bin/bash

function help {
  printf "$1
Clones a specific directory from the master branch of a git repository.

Syntax:
  $(basename $0) [--delrepo] repoUrl sourceDirectory [targetDirectory]

If targetDirectory is not specified it will be set to sourceDirectory.
Downloads a sourceDirectory from a Git repository into targetdirectory.
If targetDirectory is not specified, a directory named after `basename sourceDirectory`
will be created under the current directory.

If --delrepo is specified then the .git subdirectory in the clone will be removed after cloning.

Example 1:
Clone the tree/master/django/conf/app_template directory from the master branch of
git@github.com:django/django.git into ./app_template:

\$ $(basename $0) git@github.com:django/django.git django/conf/app_template

\$ ls app_template/django/conf/app_template/
__init__.py-tpl  admin.py-tpl  apps.py-tpl  migrations  models.py-tpl  tests.py-tpl  views.py-tpl

Example 2:
Clone the django/conf/app_template directory from the master branch of
https://github.com/django/django/tree/master/django/conf/app_template into ~/test:

\$ $(basename $0) git@github.com:django/django.git django/conf/app_template ~/test

\$ ls test/django/conf/app_template/
__init__.py-tpl  admin.py-tpl  apps.py-tpl  migrations  models.py-tpl  tests.py-tpl  views.py-tpl

"
  exit 1
}

if [ -z "$1" ]; then help "Error: repoUrl was not specified.\n"; fi
if [ -z "$2" ]; then help "Error: sourceDirectory was not specified."; fi

if [ "$1" == --delrepo ]; then
  DEL_REPO=true
  shift
fi

REPO_URL="$1"
SOURCE_DIRECTORY="$2"
if [ "$3" ]; then
  TARGET_DIRECTORY="$3"
else
  TARGET_DIRECTORY="$(basename $2)"
fi

echo "Cloning into $TARGET_DIRECTORY"
mkdir -p "$TARGET_DIRECTORY"
cd "$TARGET_DIRECTORY"
git init
git remote add origin -f "$REPO_URL"
git config core.sparseCheckout true

echo "$SOURCE_DIRECTORY" > .git/info/sparse-checkout
git pull --depth=1 origin master

if [ "$DEL_REPO" ]; then rm -rf .git; fi

1voto

Friedrich Punkte 1601

Sie können weiterhin svn :

svn export https://admin@domain.com/home/admin/repos/finisht/static static --force

zu " git clone " ein Unterverzeichnis und dann zu " git pull " dieses Unterverzeichnis.

(Es ist nicht beabsichtigt, commit&push.)

1voto

degit erstellt Kopien von Git-Repositories. Wenn Sie degit some-user/some-repo ausführen, findet es die letzte Übergabe auf https://github.com/some-user/some-repo und laden Sie das zugehörige tar Datei nach ~/.degit/some-user/some-repo/commithash.tar.gz herunter, wenn sie nicht bereits lokal existiert. (Dies ist viel schneller als die Verwendung von git clone, weil Sie nicht den gesamten Git-Verlauf herunterladen).

degit <https://github.com/user/repo/subdirectory> <output folder>

Mehr erfahren https://www.npmjs.com/package/degit

0voto

  • Wenn Sie möchten, dass clone

    git clone --no-checkout <REPOSITORY_URL>
    cd <REPOSITORY_NAME>
    1. Legen Sie nun die spezifische Datei / das spezifische Verzeichnis fest, das Sie in die Arbeitsverzeichnis :

      git sparse-checkout set <PATH_TO_A_SPECIFIC_DIRECTORY_OR_FILE_TO_PULL>
    2. Danach sollten Sie Ihr System zurücksetzen. Arbeitsverzeichnis auf den Commit, den Sie ziehen möchten.

      Zum Beispiel werden wir sie auf die Standardeinstellung zurücksetzen origin/master HEAD commit.

      git reset --hard HEAD
  • Wenn Sie möchten, dass git init und dann remote add

    git init
    git remote add origin <REPOSITORY_URL>
    1. Legen Sie nun die spezifische Datei / das spezifische Verzeichnis fest, das Sie in die Arbeitsverzeichnis :

      git sparse-checkout set <PATH_TO_A_SPECIFIC_DIRECTORY_OR_FILE_TO_PULL>
    2. Ziehen Sie die letzte Übertragung zurück:

      git pull origin master

NOTA:

Wenn Sie ein weiteres Verzeichnis/eine weitere Datei zu Ihrem Arbeitsverzeichnis können Sie wie folgt vorgehen:

git sparse-checkout add <PATH_TO_ANOTHER_SPECIFIC_DIRECTORY_OR_FILE_TO_PULL>

Wenn Sie das gesamte Repository in die Arbeitsverzeichnis machen Sie es so:

git sparse-checkout add *

Wenn Sie den Arbeitsverzeichnis machen Sie es so:

git sparse-checkout set empty

Wenn Sie möchten, können Sie den Status der verfolgten Dateien, die Sie angegeben haben, einsehen, indem Sie den Befehl ausführen:

git status

Wenn Sie das Programm verlassen möchten spärlich Modus und klonen Sie das gesamte Repository, sollten Sie ausführen:

git sparse-checkout set *
git sparse-checkout set init
git sparse-checkout set disable

0voto

Ilir Liburn Punkte 222

Ich weiß nicht, ob es jemandem gelungen ist, ein bestimmtes Verzeichnis zu ziehen, hier ist meine Erfahrung: git clone --filter=blob:none --single-branch <repo>, während des Herunterladens von Objekten sofort abbrechen, repo eingeben, dann git checkout origin/master <dir>, Fehler (sha1) ignorieren, dir eingeben, checkout (mit neuem dir) für jedes Unterverzeichnis wiederholen. Auf diese Weise gelang es mir, schnell an die Quelldateien zu gelangen

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