remota - git push example
git tira todas las ramas desde el repositorio remoto (4)
¿Cómo extraigo todas las ramas remotas a mi propio repositorio?
si escribo:
git branch -a
Recibo una larga lista de ramas, pero si escribo:
git branch
Sólo veo 2 de ellos.
¿Cómo saco TODAS las sucursales en mi lista local?
Sé que puedo hacer:
git checkout --track origin/branch-name
pero eso tira y revisa solo una rama a la vez. ¿Alguna forma de hacerlo todo de una vez sin el tedioso trabajo de ejecutar git checkout --track origin / branch-name una y otra vez?
PD. Intenté los siguientes comandos, ninguno de ellos hizo que las ramas remotas aparecieran en mi lista de sucursales de git :
git fetch --all
git remote update
git pull --all
Deberías probar algo como:
$ git fetch --all
$ for branch in `git branch -r | cut -d ''/'' -f2` ; do git checkout $branch && git pull origin $branch ; done
El comando que suelo usar para hacer visibles todas las ramas en upstream , y su seguimiento se detalla en " Rastrear todas las ramas de git remotas como sucursales locales ":
remote=origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk ''{gsub(/[^//]+///,"",$1); print $1}''`; do git branch --set-upstream-to $remote/$brname $brname ; done
O:
remote=origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk ''{gsub(/[^//]+///,"",$1); print $1}''`; do git branch --track $brname $remote/$brname ; done
Para más legibilidad:
remote=origin ; // put here the name of the remote you want
for brname in `
git branch -r | grep $remote | grep -v master | grep -v HEAD
| awk ''{gsub(/[^//]+///,"",$1); print $1}''
`; do
git branch --set-upstream-to $remote/$brname $brname;
# or
git branch --track $brname $remote/$brname ;
done
El segundo es para crear nuevas sucursales locales que rastreen sucursales remotas.
Lea, por ejemplo, esta explicación http://git-scm.com/book/en/Git-Branching-Remote-Branches
Primero vamos a aclarar algunos términos de git:
- fetch: obteniendo contenidos (o actualizaciones) desde un repositorio remoto
- pull: fetch (como arriba) y fusionar en un paso
El póster original no mencionó la fusión, por lo que podría adivinar que con la terminología adecuada de git podría haber querido preguntar "git ir a buscar todas las sucursales desde el repositorio remoto"
Si ves las ramas en la git branch -a
entonces ya las has buscado. Puede verificar esto dando el comando git show remotes/origin/some-branch:some-file
O puede hacer, por ejemplo, git diff remotes/origin/some-branch master
Incluso puedes verlos en git checkout remotes/origin/some-branch
(Para asegurarse de que puede quitar el cable de red y verá que los comandos funcionan sin ponerse en contacto con el repositorio remoto).
Las ramas llamadas remotos / ... se llaman ramas remotas, pero ya se han recuperado en tu repositorio. Son de solo lectura, no puede modificarlos (es por eso que aparece un mensaje cuando se retira). Aunque reflejan el estado de un repositorio remoto en el momento de la última operación de extracción o extracción, en realidad están almacenados localmente.
Si realiza git checkout some-branch
y some-branch aún no existe, pero existen remotos / origin / some-branch, git creará una rama de seguimiento llamada some-branch para usted (1). Nuevamente, se trata de una operación local, todos los datos se han recuperado anteriormente (o si no lo has hecho recientemente, comenzarás a trabajar en una versión obsoleta). Originalmente, el contenido de la rama de seguimiento es idéntico a su rama remota. Sin embargo, la rama de seguimiento puede ser modificada por usted localmente.
El área de trabajo de git contiene el estado de una rama a la vez. Por lo tanto, su pregunta sobre la comprobación de todas las ramas remotas a la vez realmente no tiene sentido en el contexto de git. Puedes verlos uno tras otro. Pero cada vez que revise el siguiente, el anterior desaparecerá del área de trabajo. Por supuesto, esta operación puede ejecutarse como se muestra en Rastrear todas las ramas de git remotas como sucursales locales. ¿Pero cuál es el punto de crear una secuencia de comandos de una operación masiva si solo queda el último paso?
Entonces, ¿podría ser la pregunta causada por un malentendido, asumiendo que las sucursales remotas solo se almacenarán de forma remota, pero no localmente y que solo querrá asegurarse de tener todo lo local? Si realmente desea tener más de una sucursal activada a la vez, puede clonar su repo localmente y desproteger diferentes sucursales en diferentes áreas de trabajo. (2)
En breve : si desea asegurarse de que tiene todos los datos disponibles localmente que se encuentran en el repositorio remoto, simplemente use git fetch [repo]
. A menos que haya modificado con su configuración, esto capturará todas las sucursales, es decir, actualizar las sucursales remotas existentes y también crear nuevas remotas, si corresponde.
(1) Esto es cierto en casos estándar simples. En casos más complicados con más de 1 controles remotos o configurados manualmente, es posible que necesite la opción --track para especificar exactamente lo que desea.
(2) Hay una nueva característica git worktree
para este caso de uso. Sin embargo, a partir de principios de 2018 todavía está marcado experimental
Siempre he usado esto y funciona perfectamente.
git branch -r | grep -v ''/->'' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all