Ich habe einen master
und einen development
Zweig, beide auf GitHub geschoben . Ich habe clone
d, pull
ed und fetch
ed, aber ich kann nichts anderes als den master
Zweig zurückbekommen.
Ich bin mir sicher, dass mir etwas Offensichtliches fehlt, aber ich habe das Handbuch gelesen und bekomme überhaupt keine Freude.
git
github
git-branch
git-clone
remote-branch
Peter Coulton
quelle
quelle
git branch -a
) zeigt Ihnen die Zweige in der Fernbedienung. Wenn Sie jedoch versuchen, einen dieser Zweige auszuchecken, befinden Sie sich in einem Status "getrennter KOPF". Die nächste Antwort nach unten (zweithöchste Upvotes) beantwortet eine andere Frage (das heißt: Wie werden alle Zweige gezogen, und dies funktioniert wiederum nur für diejenigen, die Sie lokal verfolgen). In mehreren Kommentaren wird darauf hingewiesen, dass Sie diegit branch -a
Ergebnisse mit einem Shell-Skript analysieren können, das alle Remote-Zweige lokal verfolgt. Zusammenfassung: Es gibt keinen git-nativen Weg, um das zu tun, was Sie wollen, und es ist vielleicht sowieso keine so gute Idee.scp [email protected]:/home/some_user/project_folder ~
Ich bin mir nicht sicher, ob diese Lösung für Github funktioniert.Antworten:
Klonen Sie zunächst ein entferntes Git- Repository und eine CD darin:
Schauen Sie sich als Nächstes die lokalen Zweige in Ihrem Repository an:
Aber es gibt noch andere Zweige, die sich in Ihrem Repository verstecken! Sie können diese mit der
-a
Flagge sehen:Wenn Sie nur einen kurzen Blick auf eine vorgelagerte Filiale werfen möchten, können Sie dies direkt überprüfen:
Wenn Sie jedoch an diesem Zweig arbeiten möchten, müssen Sie einen lokalen Tracking-Zweig erstellen, der automatisch durchgeführt wird von:
und du wirst sehen
Diese letzte Zeile wirft einige Leute: "Neuer Zweig" - nicht wahr? Was es wirklich bedeutet, ist, dass der Zweig aus dem Index genommen und lokal für Sie erstellt wird. Die vorherige Zeile ist tatsächlich informativer, da sie Ihnen sagt, dass der Zweig so eingerichtet ist, dass er den Remote-Zweig verfolgt, was normalerweise den Zweig origin / branch_name bedeutet
Wenn Sie sich nun Ihre lokalen Niederlassungen ansehen, sehen Sie Folgendes:
Sie können tatsächlich mehr als ein Remote-Repository mit verfolgen
git remote
.An diesem Punkt werden die Dinge ziemlich verrückt, also renn
gitk
los , um zu sehen, was los ist:quelle
Wenn Sie viele Remote-Zweige haben, die Sie gleichzeitig abrufen möchten, gehen Sie wie folgt vor:
Jetzt können Sie jeden Zweig nach Bedarf auschecken, ohne auf das Remote-Repository zuzugreifen.
quelle
git pull --all
das Gleiche tun - es wird nur nicht zweimal abgerufen. Und infosec812 hat recht, dass dies die Frage sowieso nicht beantwortet. Ich frage mich, wie das so viele positive Stimmen bekommen hat.git remote update
und dann versucht habegit branch
, sehe ich nur lokale Niederlassungen. Aber wenn ich das tue,git branch -a
kann ich jetzt die entfernten Zweige sehen und ich kann einen tungit pull <branchname>
, um den Zweig zu bekommen, den ich will. - Ich bin auf diese Frage aus einer Google-Suche gestoßen, und diese Antwort löst mein Problem.Dieses Bash- Skript hat mir geholfen:
Es werden Verfolgungszweige für alle Remote-Zweige erstellt, mit Ausnahme des Masters (den Sie wahrscheinlich vom ursprünglichen Klonbefehl erhalten haben). Ich denke, Sie müssen möglicherweise noch eine tun
um sicher zu sein.
quelle
git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs
Wie üblich: Testen Sie Ihr Setup vor dem Kopierenrm -rf universe as we know it
remotes/origin/
for BRANCH in $(git branch -a | grep remotes | grep -v HEAD | grep -v master); do git branch --track "${BRANCH#remotes/origin/}" "${BRANCH}"; done
Die Verwendung der
--mirror
Option scheint dieremote
Tracking-Zweige ordnungsgemäß zu kopieren . Das Repository wird jedoch als nacktes Repository eingerichtet, sodass Sie es anschließend wieder in ein normales Repository umwandeln müssen.Referenz: Git FAQ: Wie klone ich ein Repository mit allen remote verfolgten Zweigen?
quelle
git checkout
als letzten Befehl hinzu, um den Kopf des aktuellen Zweigs im geklonten Repo endgültig auszuchecken . Dies ist eine großartige Antwort, bei weitem die beste. Sei mutig, irgendwann bringen wir dich an die Spitze :-)git remote update
wird dies anschließend erneut tun. Verhalten von Zügen ändern sich. Ich bin wieder der Meinung, dass für die vollständige Kopie ein einzeiliges Skript erforderlich ist.git clone --mirror
ist sehr gut für die Sicherung Ihrer Git-Repositories ^ _ ^Sie können ganz einfach zu einem Zweig wechseln, ohne die ausgefallene Syntax "git checkout -b somebranch origin / somebranch" zu verwenden. Sie können einfach tun:
Git macht automatisch das Richtige:
Git prüft, ob ein Zweig mit demselben Namen in genau einer Fernbedienung vorhanden ist. Wenn dies der Fall ist, wird er auf dieselbe Weise verfolgt, als hätten Sie ausdrücklich angegeben, dass es sich um eine Fernverzweigung handelt. Aus der Git-Checkout-Manpage von Git 1.8.2.1:
quelle
checkout
mit dem Namen des Remote-Zweigs identisch ist, alles nach dem "/", erstellt git einen Zweig mit demselben Namen, alles nach dem "/", "Tracking" dieses Remote ? Und durch Tracking, meinen wir:git push
,git pull
wird usw. auf diesem entfernten getan werden? Wenn dies korrekt ist, erweitern Sie Ihre Antwort mit weiteren Informationen, da ich mit @Daniel einverstanden bin, verdient diese Antwort mehr Wiederholung.git checkout --track origin/somebranch
explizit sagen .Bezüglich,
mit
oder umso ausführlicher, aber leichter zu merken
könnte besser sein, wenn es darum geht, ein Remote-Repository zu verfolgen.
quelle
Der Abruf, den Sie ausführen, sollte alle Remote-Zweige abrufen, es werden jedoch keine lokalen Zweige für sie erstellt. Wenn Sie gitk verwenden, sollten Sie die Remote-Zweige sehen, die als "remotes / origin / dev" oder ähnliches beschrieben werden.
Gehen Sie folgendermaßen vor, um einen lokalen Zweig basierend auf einem Remote-Zweig zu erstellen:
Welches sollte etwas zurückgeben wie:
Wenn Sie sich jetzt im Entwicklungszweig befinden, aktualisiert "git pull" Ihren lokalen Entwickler auf den gleichen Punkt wie den Remote-Entwicklungszweig. Beachten Sie, dass alle Zweige abgerufen werden, aber nur der, auf dem Sie sich befinden, an die Spitze des Baums gezogen wird.
quelle
git checkout -b newlocaldev --track origin/dev
. Wenn Sie möchten, dass der lokale Zweig denselben Namen wie der entfernte Zweig hat und der entfernte Zweig keinen kniffligen Namen hat, können Sie den weglassen-b newlocaldev
. Mit der Standardkonfigurationseinstellungbranch.autosetupmerge
und unter der Annahme, dass Sie keinen lokalen Zweig mit dem Namen habendev
, können diese beiden Befehle dasselbe tun:git checkout -b dev origin/dev
und einfach nurgit checkout dev
. Schließlich wirdgit checkout origin/dev
kein neuer Zweig erstellt, sondern Sie werden nur in den getrennten HEAD-Status versetzt.git branch -a
listet es weiterhin als Remote-Zweig auf.Wenn Sie "git clone git: // location" ausführen, werden alle Zweige und Tags abgerufen.
Um auf einem bestimmten Remote-Zweig zu arbeiten, wird davon ausgegangen, dass es sich um den Ursprungs-Remote handelt:
quelle
$ git branch -a
herauszufinden, welche Remote-Zweige bereits verfügbar sind.git checkout -b master origin/master
undgit checkout --track origin/master
bitte ist?Verwenden Sie Aliase. Obwohl es keine nativen Git-Einzeiler gibt, können Sie Ihre eigenen als definieren
und dann verwenden als
quelle
Warum Sie nur "Meister" sehen
git clone
Lädt alle Remote-Zweige herunter, betrachtet sie jedoch weiterhin als "Remote", obwohl sich die Dateien in Ihrem neuen Repository befinden. Es gibt eine Ausnahme: Der Klonprozess erstellt einen lokalen Zweig namens "master" aus dem Remote-Zweig namens "master". Standardmäßig werdengit branch
nur lokale Zweige angezeigt, weshalb nur "master" angezeigt wird .git branch -a
zeigt alle Zweige an, einschließlich entfernter Zweige .So erhalten Sie lokale Niederlassungen
Wenn Sie tatsächlich an einem Zweig arbeiten möchten, benötigen Sie wahrscheinlich eine "lokale" Version davon. Um einfach lokale Zweige aus entfernten Zweigen zu erstellen (ohne sie auszuchecken und dadurch den Inhalt Ihres Arbeitsverzeichnisses zu ändern) , können Sie dies folgendermaßen tun:
In diesem Beispiel
branchone
ist dies der Name eines lokalen Zweigs, auf dessen Grundlage Sie erstellenorigin/branchone
. Wenn Sie stattdessen lokale Zweige mit unterschiedlichen Namen erstellen möchten, können Sie dies tun:Sobald Sie einen lokalen Zweig erstellt haben, können Sie ihn mit
git branch
anzeigen (denken Sie daran, dass Sie keine-a
lokalen Zweige sehen müssen).quelle
origin/branchone
vorhanden, können Sie auch einfachgit checkout branchone
einen lokalen Zweig mit demselben Namen erstellen und ihn so einstellen, dass er remote verfolgt wird.Dies ist nicht zu kompliziert, sehr einfache und direkte Schritte sind wie folgt;
git fetch origin
Dadurch werden alle Remote-Zweigstellen zu Ihrem lokalen Zweig gebracht.git branch -a
Dies zeigt Ihnen alle entfernten Zweige.git checkout --track origin/<branch you want to checkout>
Überprüfen Sie mit dem folgenden Befehl, ob Sie sich in der gewünschten Verzweigung befinden.
Die Ausgabe wird dies mögen;
Beachten Sie das * -Zeichen, das den aktuellen Zweig kennzeichnet.
quelle
Besser spät als nie, aber hier ist der beste Weg, dies zu tun:
Zu diesem Zeitpunkt haben Sie eine vollständige Kopie des Remote-Repos mit allen Zweigen (überprüfen mit
git branch
). Sie können--mirror
stattdessen verwenden,--bare
wenn Ihr Remote-Repo über eigene Fernbedienungen verfügt.quelle
--bare
im letzten Satz erwähnte " " ist in der angegebenen Befehlsliste nicht vorhanden.error: key does not contain a section: unset
. Die Antwort von Dave funktioniert besser.git config --unset core.bare
tatsächlich ... Für mich scheint dies die sauberste Lösung von allen zu sein, die in den Antworten hier vorgestellt werden. Schade, dass es so wenige positive Stimmen gibt ...git config --bool core.bare false
. Deshalb empfehle ich stattdessen die Antwort von Dave . Was denkst du über die Antwort von Dave ? CheersMach das einfach:
Sie sehen, 'git clone git: //example.com/myprojectt' ruft alles ab, auch die Zweige. Sie müssen sie nur auschecken, dann wird Ihr lokaler Zweig erstellt.
quelle
Sie müssen nur "git clone" verwenden, um alle Zweige zu erhalten.
Obwohl Sie nur den Hauptzweig sehen, können Sie mit "git branch -a" alle Zweige anzeigen.
Und Sie können zu jedem Zweig wechseln, den Sie bereits haben.
Machen Sie sich keine Sorgen, dass Sie nach dem "Git-Klonen" keine Verbindung zum Remote-Repo herstellen müssen. "Git-Zweig -a" und "Git-Checkout" können erfolgreich ausgeführt werden, wenn Sie Ihr WLAN schließen. Es ist also bewiesen, dass beim Ausführen von "git clone" bereits alle Zweige aus dem Remote-Repo kopiert wurden. Danach benötigen Sie das Remote-Repo nicht mehr, Ihr lokaler hat bereits alle Filialcodes.
quelle
A
git clone
soll das gesamte Repository kopieren. Versuchen Sie es zu klonen und führen Sie es dann ausgit branch -a
. Es sollte alle Zweige auflisten. Wenn Sie dann zu Zweig "foo" anstelle von "master" wechseln möchten, verwenden Siegit checkout foo
.quelle
git clone
lädt zwar alle Remote-Zweige herunter, macht aber nur einen lokalen Zweig des Masters. Dagit branch
nur lokale Zweige angezeigt werden, müssen auchgit branch -a
entfernte Zweige angezeigt werden.Verwenden Sie mein Tool git_remote_branch (Sie müssen Ruby auf Ihrem Computer installiert haben). Es wurde speziell entwickelt, um die Manipulation von Fernzweigen zum Kinderspiel zu machen.
Jedes Mal, wenn eine Operation in Ihrem Namen ausgeführt wird, wird sie an der Konsole rot gedruckt. Mit der Zeit bleiben sie endlich in deinem Gehirn :-)
Wenn Sie nicht möchten, dass grb Befehle in Ihrem Namen ausführt, verwenden Sie einfach die Funktion "EXPLAIN". Die Befehle werden auf Ihrer Konsole gedruckt und nicht für Sie ausgeführt.
Schließlich haben alle Befehle Aliase, um das Auswendiglernen zu erleichtern.
Beachten Sie, dass dies Alpha-Software ist ;-)
Hier ist die Hilfe, wenn Sie grb help ausführen:
quelle
Alle Antworten, die ich hier gesehen habe, sind gültig, aber es gibt eine viel sauberere Möglichkeit, ein Repository zu klonen und alle Zweige gleichzeitig abzurufen.
Wenn Sie ein Repository klonen, werden alle Informationen der Zweige tatsächlich heruntergeladen, aber die Zweige werden ausgeblendet. Mit dem Befehl
Sie können alle Zweige des Repositorys und mit dem Befehl anzeigen
Sie können sie dann einzeln manuell "herunterladen".
Wenn Sie jedoch ein Repo mit vielen Zweigen klonen möchten, sind alle oben dargestellten Methoden langwierig und langwierig in Bezug auf eine viel sauberere und schnellere Methode, die ich zeigen werde, obwohl sie etwas kompliziert ist. Sie benötigen drei Schritte, um dies zu erreichen:
Erstellen Sie einen neuen leeren Ordner auf Ihrem Computer und klonen Sie eine Spiegelkopie des .git-Ordners aus dem Repository:
Das lokale Repository im Ordner my_repo_folder ist noch leer. Es gibt nur noch einen versteckten .git-Ordner, den Sie mit einem "ls -alt" -Befehl vom Terminal aus sehen können.
Wechseln Sie dieses Repository von einem leeren (nackten) Repository zu einem regulären Repository, indem Sie den booleschen Wert "bare" der Git-Konfigurationen auf false setzen:
Holen Sie sich alles, was sich im aktuellen Ordner befindet, und erstellen Sie alle Zweige auf dem lokalen Computer. Dies macht dies zu einem normalen Repo.
Jetzt können Sie einfach den Befehl "git branch" eingeben und sehen, dass alle Zweige heruntergeladen wurden.
Dies ist die schnelle Methode, mit der Sie ein Git-Repository mit allen Zweigen gleichzeitig klonen können. Dies möchten Sie jedoch nicht für jedes einzelne Projekt auf diese Weise tun.
quelle
Das Klonen von einem lokalen Repo funktioniert nicht mit git clone & git fetch: Viele Zweige / Tags bleiben nicht abgerufen.
So erhalten Sie einen Klon mit allen Zweigen und Tags.
So erhalten Sie einen Klon mit allen Zweigen und Tags, aber auch mit einer Arbeitskopie:
quelle
OK, wenn Sie Ihr Repo klonen, haben Sie alle Zweige dort ...
Wenn Sie nur tun
git branch
, sind sie irgendwie versteckt ...Wenn Sie also den Namen aller Zweige sehen möchten, fügen Sie einfach ein
--all
Flag wie das folgende hinzu:git branch --all
odergit branch -a
Wenn Sie nur zur Filiale auschecken, erhalten Sie alles, was Sie brauchen.
Aber wie wäre es, wenn der Zweig von jemand anderem erstellt wird, nachdem Sie geklont haben?
In diesem Fall machen Sie einfach:
git fetch
und überprüfen Sie alle Zweige erneut ...
Wenn Sie gleichzeitig abrufen und auschecken möchten, haben Sie folgende Möglichkeiten:
git fetch && git checkout your_branch_name
Außerdem haben Sie das folgende Bild erstellt, um das zu vereinfachen, was ich gesagt habe:
quelle
Als ich mir eine der Antworten auf die Frage ansah, bemerkte ich, dass es möglich ist, sie zu verkürzen:
Aber Vorsicht, wenn einer der Remote-Zweige zB admin_master heißt, wird er nicht heruntergeladen!
Vielen Dank an Bigfish für die originelle Idee
quelle
grep
, um den Filter zu verbessern und Fehlalarme zu vermeiden.Dieser Code zieht den gesamten Code der Remote-Zweige in das lokale Repo.
quelle
Zum Kopieren und Einfügen in die Befehlszeile:
Für mehr Lesbarkeit:
Dieser Wille:
Basierend auf der Antwort von VonC .
quelle
Ich habe diese kleinen Powershell- Funktionen geschrieben, um alle meine Git-Zweige auschecken zu können, die sich auf der Ursprungsfernbedienung befinden.
Weitere Git-Funktionen finden Sie in meinem Git-Einstellungen-Repo
quelle
Hier ist eine Antwort, die awk verwendet. Diese Methode sollte ausreichen, wenn sie für ein neues Repo verwendet wird.
Bestehende Zweige werden einfach ausgecheckt oder als bereits darin deklariert. Es können jedoch Filter hinzugefügt werden, um Konflikte zu vermeiden.
Es kann auch so geändert werden, dass ein expliziter
git checkout -b <branch> -t <remote>/<branch>
Befehl aufgerufen wird.Diese Antwort folgt Nikos C. ‚s Idee .
Alternativ können wir stattdessen den Remote-Zweig angeben. Dies basiert auf der Antwort von Murphytalk .
Es wirft schwerwiegende Fehlermeldungen bei Konflikten auf, aber ich sehe sie als harmlos an.
Beide Befehle können mit einem Alias versehen werden.
Wenn Sie die Antwort von niemandem als Referenz verwenden, können Sie die folgenden Befehle zum Erstellen der Aliase verwenden:
Persönlich würde ich
track-all
oder verwendentrack-all-branches
.quelle
Ich musste genau das Gleiche tun. Hier ist mein Ruby- Skript.
quelle
Keine dieser Antworten hat es geschafft, außer dass Benutzer niemand auf dem richtigen Weg ist.
Ich hatte Probleme beim Verschieben eines Repos von einem Server / System auf einen anderen. Als ich das Repo geklont habe, wurde nur ein lokaler Zweig für den Master erstellt. Wenn ich also auf die neue Fernbedienung pushe, wurde nur der Master-Zweig gepusht.
Daher fand ich diese beiden Methoden SEHR nützlich. Hoffe, sie helfen jemand anderem.
Methode 1:
Methode 2:
quelle
git clone --mirror
auf dem Original-Repo funktioniert das gut.quelle
Git ruft normalerweise (wenn nicht angegeben) alle Zweige und / oder Tags (Refs, siehe :)
git ls-refs
aus einem oder mehreren anderen Repositorys zusammen mit den Objekten ab, die zum Vervollständigen ihrer Historien erforderlich sind. Mit anderen Worten, es werden die Objekte abgerufen, die von den bereits heruntergeladenen Objekten erreichbar sind. Siehe: Was macht dasgit fetch
wirklich?Manchmal haben Sie möglicherweise Zweige / Tags, die nicht direkt mit dem aktuellen verbunden sind. In diesem Fall hilft
git pull --all
/git fetch --all
hilft dies nicht, aber Sie können sie auflisten, indem Sie:und holen Sie sie manuell, indem Sie die Ref-Namen kennen.
Um sie alle zu holen , versuchen Sie:
Der
--depth=10000
Parameter kann hilfreich sein, wenn Sie ein flaches Repository haben.Dann überprüfen Sie noch einmal alle Ihre Filialen:
Wenn dies nicht hilft, müssen Sie fehlende Zweige manuell zur nachverfolgten Liste hinzufügen (da sie irgendwie verloren gegangen sind):
von
git remote set-branches
wie:so kann es unter
remotes/origin
nach dem Abrufen erscheinen:Fehlerbehebung
Wenn Sie immer noch nichts anderes als den Hauptzweig erhalten können, überprüfen Sie Folgendes:
git remote -v
), zgit config branch.master.remote
istorigin
.origin
auf die richtige URL verweist über:git remote show origin
(siehe diesen Beitrag ).quelle
Ab Anfang 2017 funktioniert die Antwort in diesem Kommentar :
git fetch <origin-name> <branch-name>
bringt den Zweig für Sie herunter. Dies zieht zwar nicht alle Zweige gleichzeitig, Sie können diesen Zweig jedoch einzeln ausführen.quelle
Hier ist ein weiterer kurzer einzeiliger Befehl, der lokale Zweige für alle entfernten Zweige erstellt:
Es funktioniert auch ordnungsgemäß, wenn bereits lokale Zweigstellen erstellt wurden. Sie können es nach dem ersten
git clone
oder jederzeit später aufrufen .Wenn Sie
master
nach dem Klonen keinen Zweig auschecken müssen, verwenden Siequelle