Pregunta Cómo clonar una sola rama en git?


Tengo un repositorio git local llamado 'esqueleto' que uso para almacenar esqueletos de proyectos. Tiene algunas ramas, para diferentes tipos de proyectos:

casey@agave [~/Projects/skeleton] git branch
* master
  rails
  c
  c++

Si quiero verificar la rama principal para un nuevo proyecto, puedo hacer

casey@agave [~/Projects] git clone skeleton new
Initialized empty Git repository in /Users/casey/Projects/new/.git/

y todo es como lo quiero Específicamente, la nueva rama maestra apunta a la rama principal del esqueleto, y puedo presionar y tirar para mover los cambios a la configuración básica del proyecto.

Lo que no funciona, sin embargo, es si quiero clonar otra rama. No puedo obtenerlo de modo que solo tire de la rama que quiero, por ejemplo, la rama de los rieles, y luego el nuevo repositorio tiene una rama 'maestra' que empuja y saca de la rama 'rieles' del repositorio esqueleto, por defecto.

¿Hay una buena manera de hacer esto? O tal vez esta no es la forma en que el idiota quiere que yo estructure las cosas, y ciertamente estoy abierto a eso. Tal vez debería tener varios repositorios, con los repositorios de esqueleto de los raíles rastreando el repo maestro esqueleto? Y cualquier proyecto individual que clone el repositorio del esqueleto de los carriles.

¡Cualquier pensamiento y sugerencia es apreciada!


589
2017-11-22 07:21


origen


Respuestas:


Nota la git1.7.10 (Abril de 2012) en realidad te permite clonar solo una rama:

# clone only the remote primary HEAD (default: origin/master)
git clone --single-branch

as in:
git clone <url> --branch <branch> --single-branch [<folder>]

Puedes verlo en t5500-fetch-pack.sh:

test_expect_success 'single branch clone' '
  git clone --single-branch "file://$(pwd)/." singlebranch
'

Tobu  comentarios ese:

Esto está implícito al hacer un clon superficial.
  Esto hace git clone --depth 1 la forma más fácil de ahorrar ancho de banda.

Y desde Git 1.9.0 (febrero de 2014), los clones superficiales admiten la transferencia de datos (push / pull), por lo que esa opción es aún más útil ahora.
Ver más en "Es git clone --depth 1 (clon superficial) ¿más útil de lo que imagina?".


"Deshacer" un clon superficial se detalla en "Convierta el clon superficial en clon completo"(git 1.8.3+)

# unshallow the current branch
git fetch --unshallow

# for getting back all the branches (see Peter Cordes' comment)
git config remote.origin.fetch refs/heads/*:refs/remotes/origin/*
git fetch --unshallow

Como Chris comentarios:

la línea mágica para obtener las ramas faltantes para invertir --single-branch es (git v2.1.4):

git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git fetch --unshallow  

629
2018-03-29 07:34



Una forma es ejecutar lo siguiente

git clone user@git-server:project_name.git -b branch_name /your/folder

Donde branch_name es la rama que usted elija y "/ your / folder" es la carpeta de destino para esa rama. Es verdad que esto traerá otras ramas que te dan la oportunidad de fusionarte. Ahora, comenzando con GIT 1.7.10, ahora puede hacer esto

git clone user@git-server:project_name.git -b branch_name --single-branch /your/folder

632
2017-08-12 02:02



Usando git versión 1.7.3.1 (en Windows), esto es lo que hago ($BRANCH es el nombre de la sucursal que quiero pagar y $REMOTE_REPO es la URL del repositorio remoto del que quiero clonar):

mkdir $BRANCH
cd $BRANCH
git init
git remote add -t $BRANCH -f origin $REMOTE_REPO
git checkout $BRANCH

La ventaja de este enfoque es que git pull (o git fetch) las llamadas también solo descargarán la rama solicitada.


102
2017-11-10 16:44



Puedes probar la manera larga sin aliento:

mkdir newrepo.git
cd newrepo.git
git init
git remote add origin file:///path/to/original 
git fetch origin branchiwant:refs/remotes/origin/branchiwant
git checkout -b branchiwant --track origin/branchiwant

Lo que esto hace es:

  • Crea e inicia el repositorio vacío de git.
  • Agrega el repositorio original como un origen llamado remoto.
  • Obtiene solo la rama que necesita desde el origen llamado remoto.
  • Crea y comprueba un nuevo Brach configurado para rastrear la rama fuente que acaba de clonar.

Espero que sea algo así como lo que buscas.


22
2017-11-22 08:10



de Página de manual de git-clone

--single-branch es tu amigo durante clon
recuerda usar con --branch <branch name> o solo se clonará HEAD primario remoto (maestro por defecto)

siempre recuerde hacer CTRL + F5 para leer fuente nueva, no la de la memoria caché :-)
(No lo hice así que no sabía acerca de esta opción por mucho tiempo)


14
2018-02-25 13:10



Puedes hacerlo usando el siguiente comando:

git clone -b branch_name --single-branch project_url local_folder_to_clone_in

13
2017-08-06 06:21



git clone <url> --branch <branch> --single-branch

Solo ingrese la url y el nombre de la sucursal


4
2018-03-01 10:32



Se puede hacer en 2 pasos

  1. Clonar el repositorio

    • git clone <http url>
  2. Verifica la sucursal que deseas

    • git checkout $BranchName

2
2017-09-12 18:10