Frage

Ich habe eine master und einen development Zweig, beide geschoben GitHub . Ich habe cloned, pulled und fetched, aber ich bleibe nicht in der Lage, etwas anderes als der master Zweig zu kommen.

Ich bin sicher, dass ich etwas offensichtlich fehle bin, aber ich habe das Handbuch gelesen und ich bin immer keine Freude überhaupt.

War es hilfreich?

Lösung

Zuerst klonen eine Remote- Git Repository und cd hinein:

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

Als nächster Blick auf den lokalen Niederlassungen in Ihrem Repository:

$ git branch
* master

Aber es gibt auch andere Zweige in Ihrem Repository zu verstecken! Sie können diese mit der -a Flagge sehen:

$ 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 einem vorgeschalteten Zweig nehmen möchten, können Sie es überprüfen direkt:

$ git checkout origin/experimental

Aber wenn Sie auf diesem Zweig arbeiten wollen, müssen Sie einen lokalen Tracking-Zweig erstellen, die automatisch durch getan wird:

$ git checkout experimental

und Sie werden sehen,

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

Das letzte Zeile wirft einige Leute: „Neue Niederlassung“ - nicht wahr? Was es wirklich bedeutet, ist, dass der Zweig aus dem Index genommen wird und vor Ort für Sie erstellt. Die zurück Linie ist eigentlich mehr informativ wie es Ihnen sagt, dass der Zweig eingerichtet wird, um den Remote-Zweig zu verfolgen, die in der Regel bedeutet, den Ursprung / branch_name Zweig

Nun, wenn Sie bei Ihrem örtlichen Zweige aussehen, ist es das, was Sie sehen werden:

$ git branch
* experimental
  master

Sie können tatsächlich mehr als eine Remote-Repository mit git remote verfolgen.

$ 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 sind die Dinge immer ziemlich verrückt, so laufen gitk, um zu sehen, was los ist:

$ gitk --all &

Andere Tipps

Wenn Sie viele Fern Zweige haben, die Sie auf einmal holen wollen, tun:

$ git pull --all

Jetzt können Sie einen beliebigen Zweig Kasse wie Sie möchten, ohne das Remote-Repository zu treffen.

Das Bash Skript half mir aus:

#!/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-Zweig für alle entfernten Niederlassungen erstellen, außer Master (die Sie wahrscheinlich aus dem ursprünglichen Klon-Befehl bekamen). Ich glaube, Sie könnten noch tun müssen,

git fetch --all
git pull --all

sicher sein.

  

Ein Liner : 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: Test in Ihrem Setup vor rm -rf Universum zu kopieren, wie wir wissen, dass es

     

Credits für Einzeiler zu Benutzer gehen cfi

die --mirror Option verwenden, scheint die remote Tracking-Zweige richtig zu kopieren. Allerdings setzt sie das Repository als bare Repository, also müssen Sie es zurück in ein normales Repository drehen danach.

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 klonen ich ein Repository mit allen fern nachgeführt Zweige?

Sie können ganz einfach auf einen Zweig wechseln die fancy "git checkout -b somebranch Herkunft / somebranch" Syntax ohne Verwendung. Sie können einfach tun:

git checkout somebranch

Git wird das Richtige automatisch 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 dem gleichen Namen in genau einer entfernten vorhanden ist, und wenn ja, es verfolgt sich die gleiche Art und Weise, als ob Sie explizit angegeben hatten, dass es sich um einen Remote-Zweig ist. Von der git-checkout-man-Seite von Git 1.8.2.1:

  

Wenn nicht gefunden, aber es existiert eine Tracking-Zweig in   genau Fern ein (nennen wir es ) mit einem passenden Namen, so behandeln, als   äquivalent zu

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

In Bezug auf

  

$ git checkout -b experimentelle Herkunft / experimental

mit

$ git checkout -t origin/experimental

oder die ausführlichere aber leichter merken

$ git checkout --track origin/experimental

könnte besser sein, in Bezug auf eine Remote-Repository zu verfolgen.

Die holen, dass Sie sollten tun, alle Remote-Niederlassungen bekommen, aber es wird nicht Ortsvereine für sie erstellen. Wenn Sie gitk verwenden, sollten Sie die Remote-Filialen als „Fernbedienungen / Herkunft / dev“ oder etwas ähnliches sehen.

Um einen lokalen Zweig zu erstellen, basierend auf einem entfernten Zweig, so etwas wie:

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

Welche zurückkehren sollte so etwas wie:

Branch dev set up to track remote branch refs/remotes/origin/dev.
Switched to a new branch "dev"

Wenn Sie nun auf dem dev Zweig sind „git pull“ Ihre lokale Entwickler auf den gleichen Punkt wie der Remote-dev Zweig aktualisieren. Beachten Sie, dass es alle Zweige holen, aber nur ziehen das Sie auf die Spitze des Baumes sind.

Wenn Sie das tun "git clone git: // Standort", alle Zweige und Tags geholt

.

Um auf einem bestimmten Remote-Zweig zu arbeiten, es ist der Ursprung Fern Annahme:

git checkout -b branch origin/branchname

Aliase. Obwohl es keine nativen Einzeiler Git sind, können Sie Ihre eigenen wie

definieren
git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'

und verwenden Sie es dann als

git clone-branches

Warum sehen Sie nur "Master"

git clone Downloads alle Remote-Niederlassungen Fern aber noch hält sie für „remote“, auch wenn die Dateien in Ihrem neuen Repository befinden. Es gibt eine Ausnahme von dieser Regel, die ist, dass das Klonen Prozess einen lokalen Zweig erzeugt von dem entfernten Zweig namens „Master“ genannt „Master“. Standardmäßig zeigt git branch nur lokale Niederlassungen, weshalb man nur sehen „Master“.

git branch -a zeigt alle Zweige, einschließlich Remote-Niederlassungen .


Wie lokale Niederlassungen erhalten

Wenn Sie tatsächlich auf einem Zweig arbeiten möchten, werden Sie wahrscheinlich wollen eine „lokale“ Version davon. Um einfach lokalen Niederlassungen zu erstellen von entfernten Filialen (ohne sie überprüft und dadurch Ändern Sie den Inhalt Ihres Arbeitsverzeichnis) , können Sie dies wie folgt tun:

git branch branchone origin/branchone
git branch branchtwo origin/branchtwo
git branch branchthree origin/branchthree

In diesem Beispiel branchone ist der Name einer lokalen Niederlassung sind die Schaffung Sie basiert auf origin/branchone; wenn Sie stattdessen lokale Niederlassungen mit unterschiedlichen Namen erstellen möchten, können Sie dies tun:

git branch localbranchname origin/branchone

Wenn Sie eine lokale Niederlassung erstellt haben, können Sie es mit git branch sehen (denken Sie daran, Sie müssen nicht -a brauchen Ortsvereine zu sehen).

Das ist nicht zu viel kompliziert, sehr einfach und geradlinig Schritte sind wie folgt:

git fetch origin Dadurch werden alle entfernten Niederlassungen zu Ihrem lokalen bringen.

git branch -a Dies zeigt Ihnen alle entfernten Niederlassungen.

git checkout --track origin/<branch you want to checkout>

Überprüfen Sie, ob Sie in den gewünschten Zweig durch den folgenden Befehl sind;

git branch

Der Ausgang wird wie diese;

*your current branch 
some branch2
some branch3 

Beachten Sie das * Zeichen dafür, dass der aktuellen Zweig bezeichnet.

Besser spät als nie, aber hier ist der beste Weg, dies zu tun:

mkdir repo
cd repo
git clone --bare path/to/repo.git .git
git config --unset core.bare
git reset --hard

An dieser Stelle Sie eine vollständige Kopie des Remote-Repo haben mit all seinen Zweigen (überprüfen mit git branch). Sie können --mirror statt --bare verwenden, wenn die Remote-Repo-Fernbedienungen seiner eigenen hat.

Just dies zu tun:

$ git clone git://example.com/myproject
$ cd myproject
$ git checkout branchxyz
Branch branchxyz set up to track remote branch branchxyz from origin.
Switched to a new branch 'branchxyz'
$ git pull
Already up-to-date.
$ git branch
* branchxyz
  master
$ git branch -a
* branchxyz
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/branchxyz
  remotes/origin/branch123

Sie sehen, ‚git clone git: //example.com/myprojectt‘. Holt alles, auch die Zweige, können Sie sie einfach Kasse müssen, dann wird Ihre lokale Niederlassung erstellt werden

Sie müssen nur "git clone" verwenden, um alle Zweige zu erhalten.

git clone <your_http_url>

Auch wenn Sie nur Master-Zweig zu sehen, können Sie mit "git branch -a" verwenden, um alle Zweige zu sehen.

git branch -a

Und Sie können zu jeder Filiale wechseln, die Sie bereits haben.

git checkout <your_branch_name>

Sie, dass sich keine Sorgen, nachdem Sie „git clone“, die Sie nicht mit dem Remote-Repo „git branch -a“ und „git checkout“ anschließen müssen erfolgreich ausgeführt werden, wenn Sie Ihre Wi-Fi schließen. So ist es bewiesen, dass, wenn Sie „git clone“ tun, ist es bereits alle Zweige von der Remote-Repo kopiert hat. Danach brauchen Sie nicht die Remote-Repo, Ihre lokale hat bereits alle Codes Zweige.

Ein git clone soll das gesamte Repository kopieren. Versuchen Sie es klonen und dann git branch -a laufen. Es sollte alle Zweige auflisten. Wenn dann möchten Sie Zweig „foo“ statt „Master“ wechseln, verwenden git checkout foo.

Mit meinem Tool git_remote_branch ( Sie benötigen Rubin auf Ihrem Computer installiert ist). Es wird gebaut speziell entfernten Zweig Manipulationen tot einfach.

machen

Jedes Mal, es hat eine Operation in Ihrem Namen, es druckt er an der Konsole in rot. Im Laufe der Zeit bleiben sie schließlich ins Gehirn: -)

Wenn Sie nicht wollen, grb Befehle in Ihrem Namen auszuführen, verwenden Sie einfach die ‚erklären‘ Funktion. Die Befehle werden an der Konsole gedruckt werden, anstatt für Sie ausgeführt.

Schließlich werden alle Befehle haben Aliase, Auswendiglernen zu erleichtern.

Beachten Sie, dass dies Alpha-Software ; -)

Hier ist die Hilfe, wenn Sie grb Hilfe ausführen:

git_remote_branch version 0.2.6

  Usage:

  grb create branch_name [origin_server] 

  grb publish branch_name [origin_server] 

  grb rename branch_name [origin_server] 

  grb delete branch_name [origin_server] 

  grb track branch_name [origin_server] 



  Notes:
  - If origin_server is not specified, the name 'origin' is assumed 
    (git's default)
  - The rename functionality renames the current branch

  The explain meta-command: you can also prepend any command with the 
keyword 'explain'. Instead of executing the command, git_remote_branch 
will simply output the list of commands you need to run to accomplish 
that goal.

  Example: 
    grb explain create
    grb explain create my_branch github

  All commands also have aliases:
  create: create, new
  delete: delete, destroy, kill, remove, rm
  publish: publish, remotize
  rename: rename, rn, mv, move
  track: track, follow, grab, fetch

alle Antworten, die ich hier gesehen sind gültig, aber es ist ein viel sauberer Weg, um ein Repository zu klonen und alle Zweige auf einmal zu ziehen.

Wenn Sie klonen ein Repository alle Informationen der Zweige tatsächlich heruntergeladen, aber die Zweige sind ausgeblendet. Mit dem Befehl

$ git branch -a

können Sie alle Zweige des Endlagers zeigen, und mit dem Befehl

$ git checkout -b branchname origin/branchname

Sie können dann „Download“ manuell einen nach dem anderen.


Wenn Sie jedoch ein Repo mit vielen Zweigen klonen wollen, dass alle dargestellten Möglichkeiten, oben sind langwierig und mühsam in Bezug auf einen viel sauberen und schnellen Weg, dass ich zeigen werde, obwohl es ein bisschen kompliziert ist. Sie müssen drei Schritte, um dies zu erreichen:

  1. Erster Schritt

Sie einen leeren Ordner auf Ihrem Computer erstellen und eine gespiegelte Kopie des .git Ordners aus dem Repository klonen:

$ cd ~/Desktop && mkdir my_repo_folder && cd my_repo_folder
$ git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git

das lokale Repository innerhalb des Ordners my_repo_folder noch leer ist, gibt es nur einen versteckten .git Ordner jetzt, dass Sie mit einem „ls -alt“ Befehl vom Terminal sehen.

  1. Zweiter Schritt

Schalten dieses Repository von einer leeren (blank) Repository in einem regelmäßigen Repository durch den booleschen Wert „nackten“ der GIT-Konfigurationen zu Fehlschaltungen:

$ git config --bool core.bare false
  1. Dritter Schritt

Schnappen Sie alles, was im aktuellen Ordner und alle Zweige auf der lokalen Maschine erstellen, damit diese einen normalen Repo machen.

$ git reset --hard

So, jetzt können Sie nur den Befehl „git branch“ eingeben und Sie können sehen, dass alle Zweige heruntergeladen werden.

Dies ist der schnelle Weg, in dem Sie ein Git-Repository mit allen Zweigen auf einmal klonen kann, aber es ist nicht etwas, das Sie auf diese Weise für jedes einzelne Projekt tun wollen.

Mit Blick auf eine der Antworten auf die Frage, die ich bemerkt, dass es möglich ist, es zu verkürzen:

for branch in  `git branch -r | grep -v 'HEAD\|master'`; do  
 git branch --track ${branch##*/} $branch;
done

Aber Vorsicht, wenn man von entfernten Filialen wie beispielsweise benannt admin_master es wird nicht heruntergeladen werden!

Vielen Dank für die ursprüngliche Idee bigfish

Cloning von einem lokalen Repo nicht mit git clone arbeiten & git holen: a. Viele branches / tags bleiben nicht abgerufene

Um einen Klon mit allen Zweigen und Tags zu erhalten.

git clone --mirror git://example.com/myproject myproject-local-bare-repo.git

Um einen Klon mit allen Zweigen und Tags zu erhalten, sondern auch mit einer Arbeitskopie:

git clone --mirror git://example.com/myproject myproject/.git
cd myproject
git config --unset core.bare
git config receive.denyCurrentBranch updateInstead
git checkout master

OK , wenn Sie Ihre Repo-Klon, Sie haben alle Zweige dort ...

Wenn Sie nur git branch tun, sind sie Art von versteckt ...

Also, wenn Sie möchten, dass alle Zweige Namen sehen, einfach nur --all Flagge wie folgt hinzu:

git branch --all oder git branch -a

Wenn Sie nur auf die Niederlassung Kasse erhalten Sie alles, was Sie benötigen.

Aber wie wäre es, wenn die Verzweigung erstellt von jemand anderem, nachdem Sie klonen?

In diesem Fall tut nur:

git fetch

und überprüfen Sie alle Zweige wieder ...

Wenn Sie in der gleichen Zeit holen und Kasse, können Sie tun:

git fetch && git checkout your_branch_name

erstellt auch das Bild unten für Sie zu vereinfachen, was ich gesagt:

 git branch --all alle Branchen zu bekommen

#!/bin/bash
for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `; do
   git branch --track ${branch#remotes/origin/} $branch
done

Diese Codes werden alle Remote-Niederlassungen Code zu lokalen Repo ziehen.

Für copy-paste in Befehlszeile:

git checkout master ; remote=origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'`; do git branch -D $brname ; git checkout -b $brname $remote/$brname ; done ; git checkout master

Für mehr Lesbarkeit:

git checkout master ;
remote=origin ;
for brname in `
    git branch -r | grep $remote | grep -v master | grep -v HEAD 
    | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'
`; do
    git branch -D $brname ;
    git checkout -b $brname $remote/$brname ;
done ;
git checkout master


Dies wird:

  1. Check-out-Master (so dass wir Zweig wir sind auf löschen können)
  2. wählen Remote zur Kasse (um es zu ändern, was auch immer entfernen Sie haben)
  3. Schleife durch alle Branchen der Fernbedienung außer Master und HEAD
    1. Löschen Filiale (so dass wir kraft aktualisiert Zweige überprüfen können)
    2. Besuche Zweig von der Fern
  4. Check-out-Master (aus Gründen der es)

von VonC .

Ich brauchte genau das gleiche zu tun. Hier ist meine Ruby- Skript.

#!/usr/bin/env ruby

local = []
remote = {}

# Prepare
%x[git reset --hard HEAD]
%x[git checkout master] # Makes sure that * is on master.
%x[git branch -a].each_line do |line|
  line.strip!
  if /origin\//.match(line)
     remote[line.gsub(/origin\//, '')] = line
   else
     local << line
   end
end
# Update 
remote.each_pair do |loc, rem|
  next if local.include?(loc)
  %x[git checkout --track -b #{loc} #{rem}]
end
%x[git fetch]

Ich schrieb diese kleinen Powershell Funktionen der Lage sein, alle Zweige meiner git zur Kasse, die auf Ursprung entfernt sind.

Function git-GetAllRemoteBranches {
     iex "git branch -r"                       <# get all remote branches #> `
     | % { $_ -Match "origin\/(?'name'\S+)" }  <# select only names of the branches #> `
     | % { Out-Null; $matches['name'] }        <# write does names #>
}


Function git-CheckoutAllBranches {
    git-GetAllRemoteBranches `
        | % { iex "git checkout $_" }          <# execute ' git checkout <branch>' #>
}

Weitere git Funktionen können auf meine git Einstellungen gefunden werden Repo

Git in der Regel (wenn nicht angegeben) holt alle Zweige und / oder Tags (Lit. siehe: git ls-refs) von einem oder mehreren anderen Repositories zusammen mit den Objekten notwendig, um ihre Geschichte abzuschließen. Mit anderen Worten holt es die Objekte, die von den Objekten erreichbar sind, die bereits heruntergeladen werden. Siehe: Was bedeutet git fetch wirklich tun

Manchmal können Sie branches / tags haben, die nicht direkt mit dem aktuellen verbunden sind, so git pull --all / git fetch --all wird in diesem Fall nicht helfen, aber man kann sie nach:

git ls-remote -h -t origin

und holen sie manuell durch die ref Namen zu kennen.

So holen sie alle , versuchen Sie:

git fetch origin --depth=10000 $(git ls-remote -h -t origin)

Der --depth=10000 Parameter kann helfen, wenn Sie Repository shallowed haben.

Dann lassen Sie Ihre Zweige wieder:

git branch -avv

Wenn oben nicht helfen, müssen Sie Zweige manuell auf die verfolgte Liste hinzufügen fehlen (wie sie irgendwie verloren gegangen ist):

$ git remote -v show origin
...
  Remote branches:
    master      tracked

durch git remote set-branches wie:

git remote set-branches --add origin missing_branch

, so dass es unter remotes/origin erscheinen kann nach Abruf:

$ git remote -v show origin
...
  Remote branches:
    missing_branch new (next fetch will store in remotes/origin)
$ git fetch
From github.com:Foo/Bar
 * [new branch]      missing_branch -> origin/missing_branch

Fehlerbehebung

Wenn Sie immer noch nichts anderes als der Master-Zweig bekommen, gehen Sie folgende Liste:

  • Überprüfen Sie Ihre Fernbedienungen (git remote -v), z.B.
      Bestätigen
    • , dass git config branch.master.remote ist origin.
    • Überprüfen Sie, ob origin Punkte auf der rechten Seite URL über:. git remote show origin (siehe diese Post )

Keine dieser Antworten schneiden, außer Benutzer niemand auf dem richtigen Weg ist.

Ich hatte Probleme mit einem Repo von einem Server / System zum anderen. Als ich den Repo geklont, ist es nur eine lokale Niederlassung für Master erstellt so, wenn ich auf die neue Fernbedienung gedrückt wird, nur Master-Zweig geschoben wurde.

So fand ich diese beiden Methoden sehr nützlich. Ich hoffe, sie helfen jemand anderes.

Methode 1:

git clone --mirror OLD_REPO_URL
cd new-cloned-project
mkdir .git
mv * .git
git config --local --bool core.bare false
git reset --hard HEAD
git remote add newrepo NEW_REPO_URL
git push --all newrepo
git push --tags newrepo

Methode 2:

git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'
git clone OLD_REPO_URL
cd new-cloned-project
git clone-branches
git remote add newrepo NEW_REPO_URL
git push --all newrepo
git push --tags newrepo

Verwenden Sie Befehle, die Sie

erinnern kann

Ich bin mit Bitbucket, einem Repository-Hosting-Service von Atlassian. Also versuche ich, ihre Dokumente zu folgen. Und das funktioniert perfekt für mich. Mit den folgenden einfachen und kurzen Befehlen können Sie Ihren Remote-Zweig der Kasse.

Auf den ersten Repository klonen, dann in den Zielordner ändern. Und last but not least holen und Kasse:

git clone <repo> <destination_folder>
cd <destination_folder>
git fetch && git checkout <branch>

Das ist es. Hier ist ein litte mehr reale Welt Beispiel:

git clone https://username@bitbucket.org/team/repository.git project_folder
cd project_folder
git fetch && git checkout develop

Sie werden Detailinformationen über die Befehle in der Dokumentation finden: Clone Befehl , Fetch Befehl Kasse Befehl

Ab Anfang 2017 die Antwort in diesem Kommentar funktioniert:

git fetch <origin-name> <branch-name> bringt den Zweig für Sie nach unten. Während dies auf einmal ziehen nicht alle Zweige, können Sie einzeln ausführen diese pro-Zweig.

Hier ist ein weiterer kurzer Einzeiler Befehl, schafft lokale Niederlassungen für alle entfernten Niederlassungen:

(git branch -r | sed -n '/->/!s#^  origin/##p' && echo master) | xargs -L1 git checkout

Es funktioniert auch einwandfrei, wenn Tracking-Ortsvereine sind bereits erstellt. Sie können später nach dem ersten git clone oder jederzeit aufrufen.

Wenn Sie nicht brauchen master Zweig haben nach dem Klonen ausgecheckt, verwenden

git branch -r | sed -n '/->/!s#^  origin/##p'| xargs -L1 git checkout

git clone --mirror auf dem ursprünglichen Repo funktioniert gut für diese.

git clone --mirror /path/to/original.git
git remote set-url origin /path/to/new-repo.git
git push -u origin
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top