
Casey Rodarmor
Ich habe ein lokales Git-Repository namens „skeleton“, das ich zum Speichern von Projektskeletten verwende. Es hat einige Zweige für verschiedene Arten von Projekten:
casey@agave [~/Projects/skeleton] git branch
* master
rails
c
c++
Wenn ich den Master-Zweig für ein neues Projekt auschecken möchte, kann ich das tun
casey@agave [~/Projects] git clone skeleton new
Initialized empty Git repository in /Users/casey/Projects/new/.git/
und alles ist so wie ich es will. Insbesondere zeigt der neue Master-Branch auf den Skeleton-Master-Branch, und ich kann pushen und pullen, um Änderungen am grundlegenden Projekt-Setup zu verschieben.
Was jedoch nicht funktioniert, ist, wenn ich einen anderen Zweig klonen möchte. Ich bekomme es nicht hin, dass ich nur den Ast ziehe, den ich will, zum Beispiel den rails
Verzweigung, und dann hat das neue Repository eine master
-Zweig, der zu den Skeleton-Repositorys pusht und daraus zieht rails
Zweig, standardmäßig.
Gibt es einen guten Weg, dies zu tun? Oder vielleicht ist das nicht die Art und Weise, wie Git möchte, dass ich Dinge strukturiere, und dafür bin ich auf jeden Fall offen. Vielleicht sollte ich mehrere Repositories haben, wobei das Skelett-Repository von Ruby on Rails das Master-Skelett-Repository verfolgt? Und jedes einzelne Projekt, das das Skelett-Repository von Ruby on Rails klont.

VonC
Beachten Sie das git1.7.10 (April 2012) erlaubt es dir eigentlich Klonen Sie nur einen Zweig:
# clone only the remote primary HEAD (default: origin/master)
git clone <url> --single-branch
# as in:
git clone <url> --branch <branch> --single-branch [<folder>]
(<url>
ist die URL des entfernten Repositorys und verweist nicht auf sich selbst, den geklonten Zweig)
Darin sieht man es t5500-fetch-pack.sh
:
test_expect_success 'single branch clone' '
git clone --single-branch "file://$(pwd)/." singlebranch
'
Tobu kommentiert:
Dies ist bei einem flachen Klon implizit.
Das macht git clone --depth 1
der einfachste Weg, Bandbreite zu sparen.
Und seit Git 1.9.0 (Februar 2014) unterstützen flache Klone die Datenübertragung (Push/Pull), sodass diese Option jetzt noch nützlicher ist.
Siehe mehr unter “Ist git clone --depth 1
(flacher Klon) nützlicher als es den Anschein macht?”.
Das „Rückgängigmachen“ eines flachen Klons wird detailliert unter „Konvertieren eines flachen Klons in einen vollständigen Klon“ (git 1.8.3+) beschrieben.
# unshallow the current branch
git fetch --unshallow
# for getting back all the branches (see Peter Cordes' comment)
git config remote.origin.fetch refs/heads/*:refs/remotes/origin/*
git fetch --unshallow
Wie Chris kommentiert:
die magische Linie, um fehlende Zweige umzukehren --single-branch
ist (git v2.1.4):
git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git fetch --unshallow
Mit Git 2.26 (Q1 2020), “git clone --recurse-submodules --single-branch
” verwendet jetzt beim Klonen der Submodule dieselbe Single-Branch-Option.
Sehen 132f600 begehen, Commit 4731957 (21.02.2020) von Emily Shaffer (nasamuffin
).
(Zusammengeführt von Junio C. Hamano — gitster
— in b22db26 übergeben05.03.2020)
clone
: Übergeben Sie –single-branch während –recurse-submodules
Unterzeichnet von: Emily Shaffer
Bestätigt von: Jeff King
Zuvor trat “git clone --recurse-submodules --single-branch
” führte dazu, dass Submodule alle Zweige klonten, obwohl das Superprojekt nur einen Zweig klonte.
Rohr --single-branch
durch das Submodul-Hilfsframework, um es zu ‘clone
‘ später.

Alex Nolasco
Eine Möglichkeit besteht darin, Folgendes auszuführen.
git clone user@git-server:project_name.git -b branch_name /your/folder
Woher branch_name
ist der Zweig Ihrer Wahl und “/Ihr/Ordner” ist der Zielordner für diesen Zweig. Es ist wahr, dass dies andere Zweige bringen wird, die Ihnen die Möglichkeit geben, hin und her zu fusionieren.
Aktualisieren
Ab Git 1.7.10 ist dies nun möglich
git clone user@git-server:project_name.git -b branch_name --single-branch /your/folder

Friedrich Rabe
Mit Git Version 1.7.3.1 (unter Windows) mache ich Folgendes ($BRANCH
ist der Name der Filiale, die ich auschecken möchte und $REMOTE_REPO
ist die URL des Remote-Repositorys, aus dem ich klonen möchte):
mkdir $BRANCH
cd $BRANCH
git init
git remote add -t $BRANCH -f origin $REMOTE_REPO
git checkout $BRANCH
Der Vorteil dieses Ansatzes ist, dass nachträglich git pull
(oder git fetch
)-Aufrufe laden auch nur den angeforderten Zweig herunter.

jkp
Sie können es auf die umständliche Art versuchen:
mkdir newrepo.git
cd newrepo.git
git init
git remote add origin file:///path/to/original
git fetch origin branchiwant:refs/remotes/origin/branchiwant
git checkout -b branchiwant --track origin/branchiwant
Was das bewirkt ist:
- Erstellen und initialisieren Sie ein leeres Git-Repository.
- Fügt das ursprüngliche Repository als remote aufgerufen hinzu Ursprung.
- Holt nur die gewünschte Verzweigung von der angerufenen Gegenstelle Ursprung.
- Erstellt und checkt einen neuen Branch aus, der so eingerichtet ist, dass er den soeben geklonten Source-Branch verfolgt.
Hoffentlich ist das so etwas wie das, wonach Sie suchen.

Jitendra
git clone <url> --branch <branch> --single-branch
Geben Sie einfach die URL und den Zweignamen ein.

Arulkumar
Sie können dies tun, indem Sie den folgenden Befehl verwenden:
git clone -b branch_name --single-branch project_url local_folder_to_clone_in

Peter Mortensen
Von Git-Clone-Manpage:
--single-branch
ist Ihr Freund während des Klonens, denken Sie daran, mit zu verwenden --branch <branch name>
oder nur entfernter primärer HEAD wird geklont (standardmäßig Master)
Denken Sie immer daran, dies zu tun Strg + F5 um frische Quelle zu lesen, nicht die aus dem Cache 🙂 (Ich wusste lange Zeit nichts von dieser Option.)
9858000cookie-checkWie klone ich einen einzelnen Zweig in Git?yes
Was macht
git branch -a
Show?– Jakub Narębski
22. November 2009 um 10:57 Uhr
Möchten
git checkout -b newbranch origin/branchiwant
funktioniert besser? (ohne das--track
Möglichkeit)– VonC
22. November 2009 um 11:18 Uhr
Ich halte das, was du da vorhast, für eine schlechte Idee. Verwenden Sie unterschiedliche Repositorys für unterschiedliche Projekte. Filialen sind etwas ganz anderes.
– innaM
22. November 2009 um 18:45 Uhr
@ Manni, das habe ich mir irgendwie gedacht, da Git anscheinend nicht mochte, was ich tue. Kannst du erklären warum? Liegt es daran, dass Zweige nicht langlebig sein sollten?
– Casey Rodarmor
22. November 2009 um 21:02 Uhr
@rodarmor Ich denke, was du da zu tun versuchst, ist eine gute Idee, und ich hatte genau diese Frage.
– Paul du Bois
8. Juni 2016 um 12:43 Uhr