Tengo un repositorio local de Git llamado 'esqueleto' que utilizo para almacenar esqueletos de proyectos. Tiene algunas sucursales, para diferentes tipos de proyectos:
casey@agave [~/Projects/skeleton] git branch
* master
rails
c
c++
Si quiero consultar la rama maestra 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 maestra esqueleto, y puedo presionar y tirar para mover los cambios a la configuración básica del proyecto.
Sin embargo, lo que no funciona es si quiero clonar otra rama. No puedo obtenerlo, de modo que solo extraigo la rama que quiero, por ejemplo, la rails
rama, y luego el nuevo repositorio tiene una master
rama que empuja y tira de la rails
rama del repositorio de esqueleto , de forma predeterminada.
¿Hay una buena manera de hacer esto? O, tal vez esta no sea la forma en que Git quiere que yo estructurar las cosas, y ciertamente estoy abierto a eso. ¿Quizás debería tener múltiples repositorios, con el repositorio de esqueletos Ruby on Rails rastreando el repositorio de esqueletos maestro? Y cualquier proyecto individual que clone el repositorio de esqueletos de Ruby on Rails.
git branch -a
muestra?git checkout -b newbranch origin/branchiwant
Funcionaría mejor? (sin la--track
opción)Respuestas:
Nota: el git1.7.10 (abril de 2012) en realidad le permite clonar solo una rama :
Puedes verlo en
t5500-fetch-pack.sh
:Tobu comenta que:
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.
Vea más en " ¿Es
git clone --depth 1
(clon superficial) más útil de lo que parece? "."Deshacer" un clon superficial se detalla en " Convertir clon superficial en clon completo " (git 1.8.3+)
Como Chris comenta:
Con Git 2.26 (Q1 2020), "
git clone --recurse-submodules --single-branch
" ahora usa la misma opción de rama única al clonar los submódulos .Ver commit 132f600 , commit 4731957 (21 de febrero de 2020) por Emily Shaffer (
nasamuffin
) .(Fusionada por Junio C Hamano -
gitster
- en commit b22db26 , 05 mar 2020)fuente
git clone <url> --branch <branch> --single-branch <folder>
Funciona de maravilla.clone --depth 1
la forma más fácil de ahorrar ancho de banda.--depth 1
no son seguros para el usuario porque pueden desear realmente empujar / tirar con el nuevo clon.--single-branch
esgit config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
ygit fetch --unshallow
(git v2.1.4)Una forma es ejecutar lo siguiente.
Dónde
branch_name
está la rama de su elección y "/ su / carpeta" es la carpeta de destino para esa rama. Es cierto que esto traerá otras ramas que le darán la oportunidad de fusionarse de un lado a otro.Actualizar
Ahora, comenzando con Git 1.7.10, ahora puedes hacer esto
fuente
--single-branch
para obtener solo el historial asociado con esta rama en lugar de todo el historial y las etiquetas que contiene el repositorio.Usando Git versión 1.7.3.1 (en Windows), esto es lo que hago (
$BRANCH
es el nombre de la rama que quiero pagar y$REMOTE_REPO
es la URL del repositorio remoto desde el que quiero clonar):La ventaja de este enfoque es que las llamadas
git pull
(ogit fetch
) posteriores también solo descargarán la rama solicitada.fuente
git clone -b $BRANCH $REMOTE_REPO $BRANCH
afik son lo mismo?git clone -b
le da todas las referencias remotas (todas las ramas y etiquetas remotas) como segit branch -a
muestra. Con mi guión, solo obtienes una sola referencia.-t $BRANCH
funciona incluso sin-f
, lo que se obtendría de inmediato. Luego,git fetch origin
buscaría ygit checkout $BRANCH
establecería la sucursal local y el pago. Eso es útil cuando necesita configurar el control remoto antes de ir a buscar, por ejemplogit config remote.origin.uploadpack=/bin/upload-pack
.branch -a
mostróorigin/$BRANCH
. Haciendogit checkout origin/$BRANCH
esto arreglado.Puedes probar el camino largo:
Lo que esto hace es:
Esperemos que sea algo así como lo que buscas.
fuente
git branch -r
?git branch -r
no da salida.Puede hacerlo utilizando el siguiente comando:
fuente
Desde la página de manual de git-clone :
--single-branch
es tu amigo durante la clonación, recuerda usarlo--branch <branch name>
o solo se clonará HEAD primaria remota (maestro por defecto)Siempre recuerde hacer Ctrl+ F5para leer la fuente nueva, no la de la memoria caché :-) (no lo sabía, por mucho tiempo).
fuente
Simplemente ingrese la URL y el nombre de la sucursal.
fuente
Clonar solo una rama. Esta es la manera más fácil:
fuente
Para clonar una rama específica, puede hacer:
git clone --branch yourBranchName [email protected]
fuente
Para clonar una rama de Git para la que no tiene la clave pública, use esto:
fuente
Abre el cmd.
cd folder_name
(ingrese la ruta donde clonar la rama)Solo un comando:
fuente
Un poco tarde pero quería agregar la solución que usé para resolver este problema. Encontré la solución aquí .
De todos modos, la pregunta parece ser: ¿cómo comenzar un nuevo proyecto desde una sucursal de otro repositorio?
Para esto, la solución que usé sería crear primero un nuevo repositorio en github o donde sea. Esto servirá como repositorio de su nuevo proyecto.
En su máquina local, navegue hasta el proyecto que tiene la rama que desea usar como plantilla para su nuevo proyecto.
Ejecute el comando:
Lo que esto hará es empujar el old_branch a new-repo y convertirlo en la rama maestra del nuevo repositorio.
A continuación, solo tiene que clonar el nuevo repositorio en el directorio local de su nuevo proyecto y comenzará un nuevo proyecto en la rama anterior.
fuente
Tomemos el ejemplo del repositorio de frascos. Tiene 3 sucursales además de master. Vamos a pagar la rama remota 1.1.x
clonar el repositorio git
CD en el repositorio.
buscar la rama remota 1.1.x
pagar la sucursal
Cambiará a la rama 1.1.xy rastreará la rama remota 1.1.x.
fuente
Similar a lo que @ nosaiba-darwish dijo aquí: aquí
Esto es lo que solemos hacer en nuestra empresa:
git clone -b <name_of_branch> --single-branch <git_url> folder_to_clone_locally
fuente
Si desea un clon superficial, puede hacerlo con:
--depth=1
implica--single-branch
.fuente
Hay principalmente 2 soluciones para esto:
git clone -b <BRANCH_NAME> <GIT_REMOTE_URL>
Ejemplo: git clone -b tahir https://github.com/Repository/Project.git
El siguiente comando clonará la rama tahir del repositorio git. El comando anterior clona solo la rama específica pero obtiene los detalles de otras ramas. Puede ver todos los detalles de las ramas con el comando.
git branch -a
git clone -b <BRANCH_NAME> --single-branch <GIT_REMOTE_URL>
Ejemplo: git clone -b tahir --single-branch https://github.com/Repository/Project.git
Ahora si haces un
git branch -a
, solo mostrará su rama única actual que ha clonado y no todas las ramas, por lo que depende de usted cómo lo desee.Espero que ayude a alguien algún día !! ...
fuente
puede usar este comando para obtener una sola rama y cambiar el nombre de la carpeta si desea mantener una rama independiente
ejemplo
fuente
git clone --branch {branch-name} {repo-URI}
Ejemplo:
git clone --branch dev https://github.com/ann/cleaningmachine.git
{branch-name}
{repo-URI}
fuente
Se puede hacer en 2 pasos.
Clonar el repositorio
git clone <http url>
Echa un vistazo a la sucursal que deseas
git checkout $BranchName
fuente