Obtener una rama específica usando git

19

Quiero descargar el código fuente de la rama master-next usando git como se describe en la wiki de Xilinx .

Intenté esto:

#git clone git://github.com/Xilinx/u-boot-xlnx/tree/master-next.git

Initialized empty Git repository in /home/Hannan/master-next/.git/
fatal: remote error:
Xilinx/u-boot-xlnx/tree/master-next is not a valid repository name
Email [email protected] for help

Incluso esto falló:

# git clone git://github.com/Xilinx/tree/master-next/u-boot-xlnx.git
Initialized empty Git repository in /home/Hannan/u-boot-xlnx/.git/
fatal: remote error:
Xilinx/tree/master-next/u-boot-xlnx is not a valid repository name
Email [email protected] for help

El comando que funciona es:

 git clone git://github.com/Xilinx/u-boot-xlnx.git

Pero, ¿cómo sé que esto realmente obtendrá la rama master-next y no la rama master ? ¿Cómo obtengo correctamente una rama específica usando git?

Estoy usando RHEL 6, accedido a través de PuTTY.

usuario2799508
fuente

Respuestas:

16

Como te dice el mensaje de error, git cloneespera un repositorio git. No se puede "agregar" el nombre de una rama en la ruta de esa manera. Ver ramas en git .

Puede clonar una sola rama (y es historia): git clone <url> --branch <branch> --single-branch

Ver git help clone.

Pero el comando de clonación que ejecutó le dio una copia de todo el repositorio, puede ver las ramas existentes git branchy más detalles sobre ellas git show-branch.

Cambie a la rama que desea con git checkout branch-name.

Los primeros capítulos del libro Pro Git (disponible en línea) dan más detalles sobre los comandos básicos.

Leiaz
fuente
"el comando de clonación que ejecutó le dio una copia de todo el repositorio". ¿Qué repositorio completo significa que ambas ramas se fusionaron?
user2799508
No, no están fusionados. Una rama en git no es una copia de todo el directorio, como se explica aquí .
Leiaz
Lo que hice es esto: "git clone -b master-next github.com/Xilinx/u-boot-xlnx.git " ¿esto no es correcto?
user2799508
Ya no necesitabas clon. El comando que mostró en su pregunta le dio el repositorio con todas las ramas. Pero esto también es correcto. Es equivalente a hacerlo git checkout master-nextdespués de la clonación.
Leiaz
13

Este comando debería funcionar:

$ git fetch origin [branch]

El comando anterior solo obtiene metadatos del repositorio remoto, no combina fuentes.

Si desea obtener y fusionar las fuentes, el comando sería:

$ git pull origin [branch]

Tenga cuidado con la rama donde está ejecutando el comando de combinación. Será donde se fusionan las fuentes.

raulsaeztapia
fuente
Su respuesta es técnicamente correcta, pero creo que podría beneficiarse de alguna revisión / reescritura gramatical.
Sami Laine
esto funciona bien gracias
nwgat
4

Los repositorios de git contienen todas las ramas (pero comprimidas y solo diferencias, por lo tanto, rara vez son un problema de tamaño)

Por lo tanto, puede clonar todo el proyecto como lo ha hecho con éxito. Esta es una forma estándar de obtener un repositorio, incluso si solo le interesa una rama.

La estructura .git incluirá todas las ramas realizadas en ese repositorio.

Para usar una rama específica, haga lo siguiente: git checkout [branch_name] Si la rama existe, los archivos estarán disponibles localmente (como eso, los archivos actuales en los directorios del proyecto).

git status luego mostrará qué rama es la rama actual, por ejemplo:

Según Leiaz, se puede clonar una rama específica. En la práctica, nunca he hecho esto ni he visto a otros usarlo. En investigaciones posteriores, veo que es relativamente nuevo, agregado en git 1.7.10 (abril de 2012): opción 'git clone aprendido - una sola rama' para limitar la clonación a una sola rama (¡sorpresa!); las etiquetas que no apuntan al historial de la rama no se obtienen. Por ejemplo:

git clone -b master-next --single-branch git://github.com/Xilinx/

ingrese la descripción de la imagen aquí Aquí, para mi aplicación "linker", estoy revisando la sucursal v3.0.10

Michael Durrant
fuente
1
Nunca lo he hecho tampoco, recordé haber visto la opción. Supongo que rara vez se usa ya que las ramas adicionales son de tamaño "barato".
Leiaz