¿Cómo clono todas las ramas remotas?

Resuelto Peter Coulton asked hace 16 años • 48 respuestas

Mis ramas mastery developmentse rastrean de forma remota en GitHub . ¿Cómo clono ambas ramas?

Peter Coulton avatar Sep 16 '08 05:09 Peter Coulton
Aceptado

Primero, clona un repositorio Git remoto y cddentro de él:

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

A continuación, mira las sucursales locales en tu repositorio:

$ git branch
* master

¡Pero hay otras ramas escondidas en tu repositorio! Vea estos usando la -abandera:

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

Para echar un vistazo rápido a una rama ascendente, compruébalo directamente:

$ git checkout origin/experimental

Para trabajar en esa rama, cree una rama de seguimiento local, que se realiza automáticamente mediante:

$ git checkout experimental

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

Aquí, "nueva rama" simplemente significa que la rama se toma del índice y se crea localmente para usted. Como le indica la línea anterior , la sucursal se está configurando para rastrear la sucursal remota, lo que generalmente significa la sucursal origen/nombre_sucursal.

Tus sucursales locales ahora deberían mostrar:

$ git branch
* experimental
  master

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 poniendo bastante locas, así que corre gitka ver qué pasa:

$ gitk --all &
emk avatar Sep 16 '2008 13:09 emk

Si tiene muchas ramas remotas que desea recuperar a la vez, haga lo siguiente:

git pull --all

Ahora puede verificar cualquier rama que necesite, sin tener que acceder al repositorio remoto.


Nota: Esto no creará copias de trabajo de ninguna rama no registrada, que es lo que planteaba la pregunta. Para eso, ver

  • la respuesta del pez grande
  • la respuesta de dave
Gabe Kopley avatar Jan 13 '2011 16:01 Gabe Kopley

Este script Bash 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á ramas de seguimiento para todas las ramas remotas, excepto la maestra (que probablemente obtuvo del comando de clonación original). Creo que es posible que aún necesites hacer un

git fetch --all
git pull --all

para estar seguro.

Una línea : 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: pruebe su configuración antes de copiar el universo rm -rf tal como lo conocemos

Créditos por una sola línea para el usuario cfi

bigfish avatar Jan 21 '2011 02:01 bigfish

El uso de la --mirroropción parece copiar las remoteramas de seguimiento correctamente. Sin embargo, configura el repositorio como un repositorio simple, por lo que luego debes volver a convertirlo en un repositorio normal.

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 de Git: ¿Cómo clono un repositorio con todas las ramas rastreadas de forma remota?

Dave avatar Aug 27 '2011 17:08 Dave

Puedes cambiar fácilmente a una rama sin usar la sofisticada sintaxis "git checkout -b somebranch origin/somebranch". Tu 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 verificará si existe una rama con el mismo nombre exactamente en una rama remota y, si es así, la rastreará de la misma manera que si hubiera especificado explícitamente que es una rama remota. Desde la página de manual de git-checkout de Git 1.8.2.1:

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

$ git checkout -b <branch> --track <remote>/<branch>
Nikos C. avatar May 12 '2012 12:05 Nikos C.

Acerca de,

git checkout -b origen experimental/experimental

usando

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.

murphytalk avatar Jul 27 '2009 06:07 murphytalk