¿Cómo puedo clonar todas las sucursales remotas?

8 minutos de lectura

avatar de usuario
pedro coulton

Mi master y development las sucursales se rastrean de forma remota en GitHub. ¿Cómo clono ambas ramas?

  • La respuesta aceptada aquí (git branch -a) le muestra las ramas en el control remoto, pero si intenta verificar alguna de ellas, estará en un estado de ‘CABEZA desconectada’. La siguiente respuesta hacia abajo (la segunda más votada) responde a una pregunta diferente (a saber: cómo extraer todas las ramas y, nuevamente, esto solo funciona para aquellos a los que está rastreando localmente). Varios de los comentarios señalan que se podría analizar el git branch -a resultados con un script de shell que rastrearía localmente todas las sucursales remotas. Resumen: no hay una forma nativa de git para hacer lo que quieres y, de todos modos, puede que no sea una idea tan buena.

    – Día Davis Waterbury

    18 de junio de 2012 a las 22:43

  • ¿Quizás copiar toda la carpeta a la antigua? scp [email protected]:/home/some_user/project_folder ~ Sin embargo, no estoy seguro de si esa solución funciona para github …

    – snapfractalpop

    26/09/2012 a las 22:51

  • En lugar de decir “He clonado, extraído y obtenido”, es mucho mejor que nos muestre el comandos exactos que ejecutaste.

    –Bob Gilmore

    22 de noviembre de 2013 a las 18:17

  • Siempre me sorprende por qué “clonar” no tiene el sentido de una copia exacta. Si es un clon exacto, ¿no deberían todas las sucursales ser parte del repositorio local? Quiero decir, ¿no es ese uno de los puntos de ser distribuido? Entonces, cuando algo del repositorio desaparece, aún tiene una copia completa de todo. ¿O es que los llamados “remotos” ya forman parte del repositorio local?

    – abrazo

    11 de julio de 2016 a las 6:31


  • Al ver todos los votos a favor, las respuestas, los comentarios sobre las respuestas y la cantidad alucinante de vistas, creo que es hora de que git agregue un comando para hacer esto. Y tienes razón @huggie, mis pensamientos exactamente.

    – Sнаđошƒаӽ

    29 de agosto de 2016 a las 4:29

avatar de usuario
gabe kopley

Si tiene muchas sucursales remotas que desea obtener a la vez, haga lo siguiente:

git pull --all

Ahora puede pagar cualquier sucursal que necesite, sin tener que acceder al repositorio remoto.


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

  • la respuesta de pez gordo
  • la respuesta de Dave

  • Si hago git clone, tengo la rama maestra localmente y 10 ramas “remotas”. Entonces ESTA respuesta de Gabe fue muy útil y responde la pregunta.

    – basZero

    27 de enero de 2012 a las 19:07

  • esto solo obtiene sucursales remotas que se han agregado localmente no ningún sucursal remota

    – jujule

    10 de febrero de 2012 a las 11:45

  • El primer comando es redundante. Simplemente git pull --all hará lo mismo, simplemente no se recuperará dos veces. Y infosec812 tiene razón en que esto no responde a la pregunta de todos modos. Me pregunto cómo consiguió tantos votos a favor.

    – Sven Marnach

    6 de abril de 2012 a las 14:03


  • Esto no es útil en absoluto, no extrae ninguna rama remota que no sea la existente.

    – AvinashR

    11 de abril de 2013 a las 15:02

  • No es la primera vez que una respuesta que es simplemente equivocado porque no responde la pregunta recibe cientos de votos a favor de personas que no entendieron las preguntas y / o respondieron, o que aterrizaron en Google para buscar algo diferente al problema original de OP y esa ‘respuesta’ respondió accidentalmente a su problema. Desafortunadamente, no hay un indicador válido para la respuesta que no responda la pregunta, la única forma es votar negativamente, lo que obviamente no funciona en algunos casos, por lo que ese ruido está a punto de quedarse para siempre 🙁

    – 9ilsdx 9rvj 0lo

    10 de abril de 2018 a las 14:43

  • Esto está realmente cerca de ser una solución perfecta. Lo único que lo mejoraría es si esta funcionalidad estuviera integrada como una opción en git.

    – Deven Phillips

    27/10/2011 a las 17:15

  • “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: pruebe en su configuración antes de copiar rm -rf universe as we know it

    – cfi

    18 de septiembre de 2012 a las 12:38


  • Este comando crea las ramas de funciones desde el control remoto como ramas normales (no ramas de funciones). ¿Cómo solucionar esto?

    – Alex2php

    20 de marzo de 2014 a las 14:31

  • si tiene problemas con “/” en los nombres de las sucursales, hay una solución a continuación usando un alias de git. ver respuesta de “nadie” en “respondido el 15 de mayo de 2013 a las 11:02”

    – Wemu

    12 de enero de 2015 a las 11:54

  • estoy recortando solo remotes/origin/ para preservar los espacios de nombres: for BRANCH in $(git branch -a | grep remotes | grep -v HEAD | grep -v master); do git branch --track "${BRANCH#remotes/origin/}" "${BRANCH}"; done

    – kgadek

    2 de julio de 2015 a las 8:33


avatar de usuario
dave

Utilizando el --mirror opción parece copiar el remote seguimiento de las ramas correctamente. Sin embargo, configura el repositorio como un repositorio simple, por lo que luego debe 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 sucursales rastreadas de forma remota?

  • Sabes que esto en realidad parece ser una respuesta bastante buena a pesar de que no tiene votos. ¿Hay algún peligro en hacerlo de esa manera? Tuve que pagar explícitamente una rama después de ejecutar esos comandos.

    – círculo

    12 de enero de 2012 a las 4:25

  • Esto, combinado con git push –mirror, es exactamente lo que necesitaba para crear un duplicado exacto de un repositorio de git remoto al pasar de github.com a una instalación empresarial de github. ¡Gracias!

    –Jacob Fike

    11/09/2012 a las 22:59

  • @Dave: Agrega una final git checkout como último comando para finalmente verificar el encabezado de la rama actual en el repositorio clonado. Esta es una gran respuesta, de lejos la mejor. Sé valiente, eventualmente te llevaremos a la cima 🙂

    – cfi

    18 de septiembre de 2012 a las 7:37

  • @Dave: Mmm. Estoy teniendo dudas: –mirror hace más que simplemente configurar todas las ramas para que sean rastreadas. Copia todas las referencias desde el origen y posterior git remote update hará eso de nuevo. El comportamiento de los tirones cambia. Vuelvo a creer que la copia completa requiere un guión de una línea.

    – cfi

    18 de septiembre de 2012 a las 11:53

  • git clone --mirror es muy bueno para hacer una copia de seguridad de sus repositorios git ^_^

    – TrinitronX

    20 mayo 2013 a las 21:19

avatar de usuario
harry b

Puede cambiar fácilmente a una sucursal sin usar la elegante 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 un control remoto y, si es así, la rastreará de la misma manera que si hubiera especificado explícitamente que es una sucursal remota. Desde la página de manual de git-checkout de Git 1.8.2.1:

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

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

  • Sabes que esto en realidad parece ser una respuesta bastante buena a pesar de que no tiene votos. ¿Hay algún peligro en hacerlo de esa manera? Tuve que pagar explícitamente una rama después de ejecutar esos comandos.

    – círculo

    12 de enero de 2012 a las 4:25

  • Esto, combinado con git push –mirror, es exactamente lo que necesitaba para crear un duplicado exacto de un repositorio de git remoto al pasar de github.com a una instalación empresarial de github. ¡Gracias!

    –Jacob Fike

    11/09/2012 a las 22:59

  • @Dave: Agrega una final git checkout como último comando para finalmente verificar el encabezado de la rama actual en el repositorio clonado. Esta es una gran respuesta, de lejos la mejor. Sé valiente, eventualmente te llevaremos a la cima 🙂

    – cfi

    18 de septiembre de 2012 a las 7:37

  • @Dave: Mmm. Estoy teniendo dudas: –mirror hace más que simplemente configurar todas las ramas para que sean rastreadas. Copia todas las referencias desde el origen y posterior git remote update hará eso de nuevo. El comportamiento de los tirones cambia. Vuelvo a creer que la copia completa requiere un guión de una línea.

    – cfi

    18 de septiembre de 2012 a las 11:53

  • git clone --mirror es muy bueno para hacer una copia de seguridad de sus repositorios git ^_^

    – TrinitronX

    20 mayo 2013 a las 21:19

avatar de usuario
Pedro Mortensen

Con respecto a,

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.

  • Entonces, ¿quieres decir que la segunda forma es más fácil de recordar y no hay otra diferencia?

    – aderchox

    18 de julio de 2019 a las 15:09

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad