2011-01-26 21 views
301

Me gustaría saber cómo podría clonar solo una rama en lugar de clonar todo el repositorio de Git.Clonar solo una rama

+3

Lo que un par de otros señalaron es muy cierto: a menos que haya grandes archivos comprometidos con algunas ramas y no no a los demás, esto es en realidad va a hacer mucho de cualquier diferencia. – Cascabel

+3

@Jefromi: Realmente hace la diferencia cuando lo clonas .. Ver este enlace: http://stackoverflow.com/questions/14682245/why-is-the-size-of-the-forked-repository-so-huge- on-github –

+6

@AmolMKulkarni Como dije hace dos años, solo si algunas sucursales contienen muchos datos que otros no tienen. La pregunta a la que se vinculó en realidad no dice que solo una rama es más pequeña: si todo ese enorme tamaño se encuentra en la historia común de todas las ramas, la clonación de una rama será igual de grande. – Cascabel

Respuesta

524

Desde el anuncio Git 1.7.10 (abril de 2012):

  • git clone aprendidas --single-branch opción para limitar la clonación de una sola rama; (¡sorpresa!) las etiquetas que no apuntan al historial de la rama no se captan.

Git realidad te permite clonar una sola rama, por ejemplo:

git clone -b mybranch --single-branch git://sub.domain.com/repo.git 

Nota: También you can add another single branch or "undo" esta acción.

+5

¡Gracias! Si --single-branch le da un error, simplemente elimínelo y guarde el -b :) – Braunson

+13

@Brauson si solo pone -b luego clona todas las ramas, y después de que compruebe esa rama. Este no es el resultado esperado. Así que te recomiendo, si es posible actualizar git a lastest (o> = 1.7.10) y el comando no daría un error. – shakaran

+5

¿Alguien sabe cómo clonar dos ramas, o agregar otra rama individual al repositorio clonado de una sola rama? –

59

se podría crear una nueva operación con

git init 

y luego usar

git fetch url-to-repo branchname:refs/remotes/origin/branchname 

a buscar simplemente que una rama en una sucursal de seguimiento remoto local.

+3

¿Reemplazó "branchname" con el nombre de la rama que desea? –

+0

Ahora tiene una rama de seguimiento remoto que contiene los contenidos de la sucursal del repositorio remoto. Puede hacer lo que quiera con él, incluso crear una sucursal local a partir de él, o restablecer su bifurcación actual a él, o cualquier otra cosa. –

+0

Te aconsejo que intentes clonar todo el repositorio y ver cuánto aumenta tu .git subdir. Mi suposición sería que es un aumento insignificante, incluso en proyectos muy grandes. –

20

--single-rama” interruptor es su respuesta, pero sólo funciona si tiene Git versión 1.8.x en adelante, primer cheque

#git --version 

Si ya tiene la versión 1.8 git .X instalar sólo tiene que utilizar "rama -by rama --single" clonar una sola rama

#git clone -b branch --single-branch git://github/repository.git 

por defecto en Ubuntu 12.04/12.10/13.10 y Debian 7 la instalación git por defecto es para versiones ion 1.7.x solamente, donde --single-branch es un modificador desconocido. En ese caso, primero debe instalar git más nuevo desde un ppa no predeterminado como se muestra a continuación.

sudo add-apt-repository ppa:pdoes/ppa 
sudo apt-get update 
sudo apt-get install git 
git --version 

Una vez 1.8.x está instalado ahora simplemente hacer:

git clone -b branch --single-branch git://github/repository.git 

Git ahora sólo descargar una sola rama del servidor.

+2

+1 para obtener instrucciones rápidas sobre cómo actualizar git en versiones anteriores de las distribuciones de Debian. –

+0

Pequeña adición: para obtener el comando add-apt-repository, instale el paquete software-properties-common, también tuve que instalar python-software-properties. (Sé que esta es una respuesta antigua, pero sigue siendo relevante, ¡al menos fue para mí!). – Graftak

4

que he hecho con más adelante solo comando git:

git clone [url] -b [branch-name] --single-branch 
+0

yo también, siempre usaré este comando para clonar una sola rama – yussan