¿Cómo clono todas las ramas remotas?
Mis ramas master
y development
se rastrean de forma remota en GitHub . ¿Cómo clono ambas ramas?
Primero, clona un repositorio Git remoto y cd
dentro 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 -a
bandera:
$ 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 gitk
a ver qué pasa:
$ gitk --all &
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
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 conocemosCréditos por una sola línea para el usuario cfi
El uso de la --mirror
opción parece copiar las remote
ramas 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?
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>
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.