Frage Wie klonen Sie alle Remote-Zweige in Git?


Ich habe ein master und ein development Zweig, beide geschoben zu GitHub. Ich habe cloned, pulled, und fetched, aber ich bleibe unfähig, etwas anderes als das zu bekommen master zurück verzweigen.

Ich bin sicher, ich vermisse etwas Offensichtliches, aber ich habe das Handbuch gelesen und bekomme überhaupt keine Freude.


3555
2017-09-15 22:42


Ursprung


Antworten:


Klonen Sie zuerst eine Fernbedienung Git Repository und CD hinein:

$ git clone git://example.com/myproject
$ cd myproject

Sehen Sie sich als Nächstes die lokalen Zweige in Ihrem Repository an:

$ git branch
* master

Aber es gibt andere Zweige, die sich in deinem Repository verstecken! Sie können diese mit den -a Flagge:

$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental

Wenn Sie nur einen kurzen Blick auf eine vorgelagerte Filiale werfen möchten, können Sie es direkt auschecken:

$ git checkout origin/experimental

Wenn Sie jedoch an diesem Zweig arbeiten möchten, müssen Sie einen lokalen Tracking-Zweig erstellen, der automatisch ausgeführt wird von:

$ git checkout experimental

und du wirst sehen

Branch experimental set up to track remote branch experimental from origin.
Switched to a new branch 'experimental'

Diese letzte Zeile wirft einige Leute auf: "New Branch" - hm? Was es wirklich bedeutet, ist, dass der Zweig aus dem Index genommen und lokal für Sie erstellt wird. Das Bisherige Die Zeile ist eigentlich informativer, da sie besagt, dass der Zweig eingerichtet wird, um den entfernten Zweig zu verfolgen, was normalerweise den Zweig "Herkunft / Zweigname" bedeutet

Wenn Sie sich nun Ihre lokalen Niederlassungen ansehen, sehen Sie Folgendes:

$ git branch
* experimental
  master

Sie können mehr als ein Remote-Repository mit verfolgen git remote.

$ git remote add win32 git://example.com/users/joe/myproject-win32-port
$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental
  remotes/win32/master
  remotes/win32/new-widgets

An diesem Punkt werden die Dinge ziemlich verrückt, also lauf gitk um zu sehen, was vor sich geht:

$ gitk --all &

4020
2017-09-16 13:28



Wenn Sie viele Remote-Zweigstellen haben, die Sie gleichzeitig abrufen möchten, führen Sie Folgendes aus:

$ git pull --all

Jetzt können Sie jede Verzweigung nach Bedarf auschecken, ohne das Remote-Repository zu treffen.


743
2018-01-13 16:42



Dies Bash Skript hat mir geholfen:

#!/bin/bash
for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
    git branch --track "${branch##*/}" "$branch"
done

Es wird Tracking-Zweige für alle Remote-Zweige außer Master erstellt (die Sie wahrscheinlich aus dem ursprünglichen Klonbefehl erhalten haben). Ich denke, du musst vielleicht noch ein tun

git fetch --all
git pull --all

um sicher zu sein.

Einzeiler: 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 immer: Testen Sie in Ihrem Setup, bevor Sie das rm -rf-Universum kopieren, wie wir es kennen

Credits für Einzeiler gehen an Nutzer cfi


379
2018-01-21 02:18



Verwendung der --mirror Option scheint das zu kopieren remote Verfolgen von Filialen richtig. Es richtet das Repository jedoch als bloßes Repository ein, sodass Sie es anschließend in ein normales Repository zurückverwandeln müssen.

git clone --mirror path/to/original path/to/dest/.git
cd path/to/dest
git config --bool core.bare false
git checkout anybranch

Referenz: Git FAQ: Wie klone ich ein Repository mit allen remote verfolgten Zweigen?


279
2017-08-27 17:49



Sie können leicht zu einem Zweig wechseln, ohne die ausgefallene "git checkout -b somebranch origin / somebranch" -Syntax zu verwenden. Sie können einfach tun:

git checkout somebranch

Git wird automatisch das Richtige tun:

$ git checkout somebranch
Branch somebranch set up to track remote branch somebranch from origin.
Switched to a new branch 'somebranch'

Git überprüft, ob eine Verzweigung mit dem gleichen Namen in genau einer Fernbedienung vorhanden ist, und wenn dies der Fall ist, wird es genauso verfolgt, als ob Sie explizit angegeben hätten, dass es sich um eine entfernte Verzweigung handelt. Auf der Git-Checkout-Manpage von Git 1.8.2.1:

Wenn <branch> nicht gefunden wird, aber ein Tracking-Zweig existiert   genau eine Fernbedienung (nennen Sie <remote>) mit einem passenden Namen, behandeln wie   gleichwertig

$ git checkout -b <branch> --track <remote>/<branch>

204
2018-05-12 12:11



Bezüglich,

$ git checkout -b experimenteller Ursprung / experimentell

verwenden

$ git checkout -t origin/experimental

oder die mehr wortreich, aber leichter zu merken

$ git checkout --track origin/experimental

könnte besser sein, in Bezug auf die Verfolgung eines Remote-Repository.


88
2017-07-27 06:10



Der Abruf, den Sie durchführen, sollte alle Remote-Zweige abrufen, aber es werden keine lokalen Zweige für sie erstellt. Wenn Sie gitk verwenden, sollten Sie die entfernten Zweige als "remotes / origin / dev" oder etwas ähnliches sehen.

Um einen lokalen Zweig basierend auf einem entfernten Zweig zu erstellen, tun Sie Folgendes:

git checkout -b dev refs / remotes / Herkunft / dev

Was sollte etwas zurückgeben wie:

Branch Dev eingerichtet, um Remote Branch Refs / Remotes / Herkunft / dev zu verfolgen.
Zu einem neuen Zweig "dev" gewechselt

Jetzt, wenn du im Dev-Zweig bist, wird "git pull" deinen lokalen Entwickler auf denselben Punkt bringen wie der entfernte Entwickler-Zweig. Beachten Sie, dass es alle Zweige abruft, aber nur den einen Zweig an den Anfang der Struktur zieht.


77
2017-09-15 22:52



Wenn Sie "git clone git: // location" ausführen, werden alle Zweige und Tags abgerufen.

Um an einer bestimmten Remote-Zweigstelle zu arbeiten, unter der Annahme, dass es sich um die Remote-Quelle handelt:

git checkout -b branch origin/branchname

57
2017-09-15 22:47