Pregunta ¿Cómo clonar todas las sucursales remotas en Git?


tengo un master y un development rama, ambos empujados a GitHub. He clonere, pulled, y fetched, pero sigo sin poder obtener nada más que el master rama hacia atrás.

Estoy seguro de que me está perdiendo algo obvio, pero he leído el manual y no me agrada nada.


3555
2017-09-15 22:42


origen


Respuestas:


Primero, clona un control remoto Git repositorio y discos compactos en ello:

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

Luego, mira las sucursales locales en tu repositorio:

$ git branch
* master

¡Pero hay otras ramas escondidas en tu repositorio! Puedes ver estos usando el -a bandera:

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

Si solo desea echar un vistazo rápido a una sucursal aguas arriba, puede verificarlo directamente:

$ git checkout origin/experimental

Pero si quieres trabajar en esa rama, necesitarás crear una rama de seguimiento local que se realice automáticamente mediante:

$ git checkout experimental

y tu verás

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

Esa última línea arroja a algunas personas: "Nueva sucursal" - ¿eh? Lo que realmente significa es que la rama se toma del índice y se crea localmente para usted. los anterior línea es en realidad más informativo, ya que le dice que la rama se está configurando para rastrear la rama remota, lo que generalmente significa la rama de origen / nombre_de_la_subvención

Ahora, si miras tus sucursales locales, esto es lo que verás:

$ git branch
* experimental
  master

En realidad puede rastrear más de un repositorio remoto usando 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

En este punto, las cosas se están volviendo locas, así que corre gitk para ver lo que está pasando:

$ gitk --all &

4020
2017-09-16 13:28



Si tiene muchas sucursales remotas que quiere buscar de una vez, haga lo siguiente:

$ git pull --all

Ahora puede verificar cualquier sucursal como lo necesite, sin tocar el repositorio remoto.


743
2018-01-13 16:42



Esta Intento script me ayudó:

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

Creará ramales de seguimiento para todas las ramas remotas, excepto el maestro (que probablemente obtuvo del comando de clonación original). Creo que aún podrías necesitar hacer una

git fetch --all
git pull --all

para estar seguro.

Un trazador de líneas: 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 Como de costumbre: prueba en tu configuración antes de copiar el universo rm -rf como lo conocemos

Créditos para un trazador de líneas ir a usuario cfi


379
2018-01-21 02:18



Utilizando el --mirror la opción parece copiar el remote rastreando las ramas apropiadamente. Sin embargo, configura el repositorio como un repositorio simple, por lo que debe volver a convertirlo en un repositorio normal después.

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

Referencia: Preguntas frecuentes sobre Git: ¿Cómo puedo clonar un repositorio con todas las sucursales rastreadas de forma remota?


279
2017-08-27 17:49



Puede cambiar fácilmente a una sucursal sin utilizar la elegante sintaxis "git checkout -b some branch origin / some branch". Puedes hacer:

git checkout somebranch

Git automáticamente hará lo correcto:

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

Git comprobará si existe una rama con el mismo nombre en exactamente un control remoto, y si lo hace, lo rastrea de la misma manera que si hubiera especificado explícitamente que se trata de una rama remota. De la página del manual de git-checkout de Git 1.8.2.1:

Si <branch> no se encuentra pero existe una rama de seguimiento en   exactamente un control remoto (llámelo <remoto>) con un nombre que coincida, trate como   equivalente a

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

204
2018-05-12 12:11



Respecto a,

$ git checkout-b origen experimental / experimental

utilizando

$ git checkout -t origin/experimental

o el más detallado, pero más fácil de recordar

$ git checkout --track origin/experimental

podría ser mejor, en términos de seguimiento de un repositorio remoto.


88
2017-07-27 06:10



La búsqueda que estás haciendo debe obtener todas las ramas remotas, pero no creará ramas locales para ellas. Si usa gitk, debería ver las ramas remotas descritas como "remotes / origin / dev" o algo similar.

Para crear una sucursal local basada en una sucursal remota, haga algo como:

git checkout -b dev refs / remotos / origen / dev

Que debería devolver algo así como:

Branch dev configurado para rastrear refs remotos / remotos / origin / dev.
Cambiado a una nueva rama "dev"

Ahora, cuando se encuentre en la rama de desarrollo, "git pull" actualizará su desarrollador local al mismo punto que la rama de desarrollo remoto. Tenga en cuenta que obtendrá todas las ramas, pero solo extraerá la que está en la parte superior del árbol.


77
2017-09-15 22:52



Cuando haces "git clone git: // location", se obtienen todas las ramas y etiquetas.

Para trabajar sobre una rama remota específica, suponiendo que es el origen remoto:

git checkout -b branch origin/branchname

57
2017-09-15 22:47