4812 Stimmen

Wie man alle entfernten Zweige in Git klont

J'ai un master und eine development Zweig, die beide nach GitHub . Ich habe clone d, pull und fetch aber ich kann nach wie vor nichts anderes bekommen als die master Zweig zurück.

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

5213voto

emk Punkte 58032

Klonen Sie zunächst eine Fernbedienung Git Repository und cd in sie hinein:

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

Als nächstes sehen Sie sich die lokalen Zweige in Ihrem Repository an:

$ git branch
* master

Aber es gibt noch andere Zweige, die sich in Ihrem Projektarchiv verstecken! Sie können diese mit der Option -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 einen Upstream-Zweig werfen wollen, können Sie ihn direkt auschecken:

$ git checkout origin/experimental

Wenn Sie jedoch an diesem Zweig arbeiten wollen, müssen Sie einen lokalen Verfolgungszweig erstellen, was automatisch geschieht:

$ git checkout experimental

und Sie werden sehen

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

Hier bedeutet "neuer Zweig" einfach, dass der Zweig aus dem Index genommen und lokal für Sie erstellt wird. Da der vorherige Zeile sagt Ihnen, dass der Zweig so eingerichtet wird, dass er den entfernten Zweig verfolgt, was in der Regel den Zweig origin/branch_name bedeutet.

Wenn Sie sich nun Ihre örtlichen Zweigstellen ansehen, werden Sie Folgendes feststellen:

$ git branch
* experimental
  master

Sie können sogar mehr als ein entferntes Repository verfolgen, indem Sie 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 &

941voto

Gabe Kopley Punkte 15797

Wenn Sie viele entfernte Zweige auf einmal abrufen wollen, tun Sie das:

git pull --all

Jetzt können Sie bei Bedarf jeden Zweig auschecken, ohne auf das entfernte Repository zuzugreifen.


Anmerkung: Dadurch werden keine Arbeitskopien von nicht ausgecheckten Zweigen erstellt, und das war die Frage, die gestellt wurde. Siehe dazu

565voto

bigfish Punkte 5281

Este Bash Das 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

Er erstellt Verfolgungszweige für alle entfernten Zweige, mit Ausnahme von master (den Sie wahrscheinlich durch den ursprünglichen Klon-Befehl erhalten haben). Ich denke, Sie müssen noch eine

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 üblich: Testen Sie Ihr Setup, bevor Sie rm -rf universe, wie wir es kennen, kopieren

Credits für den Einzeiler gehen an Benutzer cfi

521voto

Dave Punkte 4473

Die Verwendung des --mirror scheint die Option remote Zweige richtig verfolgen. Allerdings wird das Repository als Bare Repository eingerichtet, so dass Sie es anschließend wieder in ein normales Repository umwandeln 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 fernüberwachten Zweigen?

248voto

Nikos C. Punkte 48846

Sie können einfach zu einem Zweig wechseln, ohne die ausgefallene Syntax "git checkout -b somebranch origin/somebranch" zu verwenden. Das können Sie 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 prüft, ob ein Zweig mit demselben Namen in genau einem entfernten Zweig existiert, und wenn dies der Fall ist, wird er auf dieselbe Weise verfolgt, als ob Sie explizit angegeben hätten, dass es sich um einen entfernten Zweig handelt. Aus der Manpage git-checkout von Git 1.8.2.1:

Wenn <branch> nicht gefunden wird, es aber einen Verfolgungszweig in genau einen entfernten Zweig (nennen Sie ihn <remote>) mit einem passenden Namen, behandeln Sie ihn als äquivalent zu

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

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