Saltar al contenido

git pull todas las ramas del repositorio remoto

Si encuentras algo que no entiendes puedes dejarlo en la sección de comentarios y te ayudaremos tan rápido como podamos.

Solución:

Lea, por ejemplo, esta explicación http://git-scm.com/book/en/Git-Branching-Remote-Branches

Primero aclaremos algo de terminología de git:

  • buscar: obtener contenido (o actualizaciones) de un repositorio remoto
  • tirar: buscar (como arriba) y combinar en un solo paso

El cartel original no mencionaba la fusión, por lo que podría suponer que, en la terminología adecuada de git, incluso podría haber querido preguntar “git buscar todas las ramas del repositorio remoto”

Si ves las ramas en git branch -a entonces ya los has buscado. Puedes 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 echarles un vistazo git checkout remotes/origin/some-branch

(Para estar seguro, puede quitar el cable de red y verá que los comandos funcionan sin ponerse en contacto con el repositorio remoto).

Las sucursales denominadas remotes/… se denominan sucursales remotas, pero ya se han obtenido en su repositorio. Son de solo lectura, no puedes modificarlos (por eso aparece un mensaje al finalizar la compra). Aunque reflejan el estado de un repositorio remoto en el momento de la última operación de obtención o extracción, de hecho se almacenan localmente.

Si lo haces git checkout some-branch y some-branch aún no existe pero existe remotes/origin/some-branch, git creará una rama de seguimiento llamada some-branch para ti (1). Nuevamente, esta es una operación local, todos los datos se han obtenido antes (o si no los ha obtenido recientemente, comenzará 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. Entonces, su pregunta sobre verificar todas las sucursales remotas a la vez no tiene sentido en el contexto de git. Puede consultarlos uno tras otro. Pero cada vez que revise el siguiente, el anterior desaparecerá del área de trabajo. Por supuesto, esta operación se puede programar como se muestra en Rastrear todas las ramas remotas de git como sucursales locales. Pero, ¿cuál es el punto de programar una operación masiva si solo queda el último paso?

Entonces, ¿podría la pregunta deberse a un malentendido, suponiendo que las sucursales remotas solo se almacenarían de forma remota, pero no localmente, y solo quería asegurarse de tener todo local? Si realmente desea tener más de una rama desprotegida a la vez, puede clonar su repositorio localmente y desproteger diferentes ramas en diferentes áreas de trabajo. (2)

Dentro de poco: Si quiere estar seguro de que tiene todos los datos disponibles localmente que están en el repositorio remoto, simplemente use git fetch [repo]. A menos que haya modificado su configuración, obtendrá todas las sucursales, es decir, actualizará las sucursales remotas existentes y también creará nuevas sucursales remotas, si corresponde.

(1) Esto es true en casos estándar simples. En casos más complicados con más de 1 control remoto o controles remotos 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 principios de 2018 todavía está marcado como experimental.

El comando que suelo usar para hacer que todas las ramas ascendentes sean visibles y rastrearlas se detalla en “Rastrear todas las ramas remotas de git como ramas 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 mayor 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 rastrean sucursales remotas.

Siempre lo he usado 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

Reseñas y valoraciones

Puedes añadir valor a nuestro contenido cooperando tu experiencia en las aclaraciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *