A diferencia de los antiguos sistemas de control de versiones como SVN y CVS, Git es distribuido. Cada desarrollador tiene la historia completa y el control de su código local o remotamente. También pueden acceder o manipular varias partes del código como consideren oportuno desde diferentes lugares.
Desde que Linus Torvalds (el famoso creador del kernel del sistema operativo Linux) creó Git en 2005 para el desarrollo del kernel de Linux, se ha convertido en el sistema de control de versiones moderno más utilizado en el mundo.
En este artículo, te presentaré los flujos de trabajo de Git clone y Git branch y te mostraré cómo puedes clonar una rama específica en base a tus necesidades. ¡Comencemos!
Prerequisitos
- Conocimientos básicos de la terminal
- Capacidad de escribir comandos en la terminal
- Git instalado (te mostraré cómo)
- Una cuenta de GitHub
- Una sonrisa en tu rostro (Pon esa sonrisa, amigo)
Introducción rápida a Git y GitHub
De acuerdo a Wikipedia,
Git es un sistema de control de versiones distribuido diseñado para rastrear los cambios de un proyecto (código) en el desarrollo de software. Tiene por objeto reforzar la coordinación, la colaboración, la rapidez y la eficiencia entre los desarrolladores.
GitHub, por otro lado, es un servicio de alojamiento web para el control de versiones usando Git. Ofrece todas las funcionalidades de control de versiones distribuidas y de gestión de código fuente de Git, así como la adición de más características para el código informático.
Cómo Instalar Git en Windows
Descarga e instala la última versión del Instalador de Git para Windows aquí.
Cómo Instalar Git en Linux
Aquí están los comandos basados en tu distribución de Linux:
Debian o Ubuntu
sudo apt-get update
sudo apt-get install git
Fedora
sudo dnf install git
CentOS
sudo yum install git
Arch Linux
sudo pacman -Sy git
Gentoo
sudo emerge --ask --verbose dev-vcs/git
Cómo Instalar Git en Mac
Descarga e instala la última versión del Instalador de Git para Mac aquí.
O escribe este comando:
brew install git
Ahora que tenemos Git instalado, pasemos al tutorial.
Introducción a Git Clone
Git te permite administrar y versionar tu(s) proyecto(s) en un "repositorio". Este repositorio se almacena en un servicio de alojamiento web para el control de versiones, como GitHub.
Luego puedes clonar este repositorio en tu máquina local y tener todos los archivos y branches (ramas) localmente (pronto explicaré más sobre branches).

Por ejemplo, puedes clonar el repositorio de freeCodeCamp con SSH así:
git clone git@github.com:freeCodeCamp/freeCodeCamp.git
Introducción a Git Branches
Cuando se trabaja en un proyecto, es probable que tenga características diferentes. Y múltiples colaboradores estarán trabajando en este proyecto y sus características.
Las branches permiten crear un "playground" con los mismos archivos en la master
branch. Puedes usar este branch para construir características independientes, probar nuevas características, hacer cambios de últimas hora, crear correcciones, escribir documentos o probar ideas sin romper o afectar el código de producción. Cuando termines, fusiona el branch al master
branch de producción.
"Branching" o ramificación, es un concepto básico en Git que también se utiliza en GitHub para gestionar los flujos de trabajo de diferentes versiones de un proyecto. La master
branch es siempre la branch por defecto en un repositorio que suele considerarse "código de producción y despliegue". Nuevas branches como passwordless-auth
o refactor-signup-ux
pueden ser creadas desde la master
branch.

Cómo Clonar Git Branches
Mientras que puedes clonar los repositorios con el comando git clone
, ten en cuenta que este clona la branch y el HEAD
remoto. Normalmente es la master
por defecto e incluye todas las demás ramas del repositorio.
Así que cuando clonas un repositorio, clonas master
y todas las demás branches. Esto significa que tendrás que revisar otra rama tú mismo.
Digamos que tu tarea en un proyecto es trabajar en una característica para agregar autenticación sin contraseña a un tablero de usuario. Y esta característica está en la branch passwordless-auth
.
Realmente no necesitas la master
branch ya que tu "feature branch" se fusionará con master
después. ¿Cómo clonas entonces la branch de passwordless-auth
sin buscar todas las demás ramas con "un montón de archivos que no necesitas"?
He creado este repositorio de muestra para explicar esto. Este repositorio contiene un simple blog construido con Nextjs y tiene cuatro ramas ficticias:
- master
- dev
- staging
- passwordless-auth
En Nextjs, cualquier archivo dentro de la carpeta pages/api
es mapeado a la ruta /api/*
y será tratado como un endpoint de la API en lugar de un page
. En nuestro repositorio, he creado diferentes APIs ficticias en este directorio para que cada branch sea diferente.
La master
branch contiene el archivo pages/api/hello.js mientras que passwordless-auth
contiene el archivo pages/api/auth.js. Cada archivo devuelve una respuesta de texto ficticio. Ve la respuesta del hello API de master
aquí (¿Con un mensaje especial para ti?).
Clonemos el repositorio:
git clone git@github.com:BolajiAyodeji/nextjs-blog.git
Esto nos da acceso a todas las branches de este repositorio y puedes alternar fácilmente entre cada una para ver cada versión y sus archivos.
git branch -a

¿Te preguntas de dónde vinieron las branches remotes/origin/... ?
Cuando clonas un repositorio, sacas datos de un repositorio en Internet o de un servidor interno conocido como remote. La palabra "origin" es un alias creado por Git para sustituir a la URL remota (puedes cambiar o especificar otro alias si quieres).
Estos branches remotes/origin/... apuntan hacia el repositorio de origen que clonaste de internet para que puedas seguir haciendo pull/push desde el origen.

Así que cuando clonas master
en tu máquina, remotes/origin/master
es el master
branch original en internet, y master
está en tu máquina local. Así que podrás hacer pull/push desde y hacia remotes/origin/master
.
En resumen, Remote es la URL que apunta al repositorio en Internet, mientras que Origin es un alias para esta URL remota.

Cómo Clonar una Branch Específica
Ahora vamos a clonar una branch específica de nuestro repositorio de demostración. Hay dos maneras de clonar una branch específica. Puedes hacer cualquiera de ellas:
- Clonar el repositorio, obtener todas las branches, y hacer un checkout a una branch específica inmediatamente.
- Clonar el repositorio y obtener sólo una branch.
Opción Uno
git clone --branch <branchname> <remote-repo-url>
o
git clone -b <branchname> <remote-repo-url>
Con esto, se obtienen todas las branches del repositorio, se hace un checkout a la que se ha especificado, y la rama específica se convierte en la branch local configurada para git push
y git pull
. Pero aún así, obtuviste todos los archivos de cada branch. Puede que esto no sea lo que quieres, ¿verdad?
Vamos a probarlo:
git clone -b passwordless-auth git@github.com:BolajiAyodeji/nextjs-blog.git
Esto configura automáticamente passwordless-auth
como la branch local, pero sigue rastreando otras branches.


Opción Dos
git clone --branch <branchname> --single-branch <remote-repo-url>
o
git clone -b <branchname> --single-branch <remote-repo-url>
Esto realiza la misma acción que la opción uno, excepto que la opción --single-branch
fue introducida en la versión 1.7.10 y posteriores de Git. Te permite sólo recuperar archivos de la branch especificada sin recuperar otras ramas.
Vamos a probarlo:
git clone -b passwordless-auth --single-branch git@github.com:BolajiAyodeji/nextjs-blog.git
Esto configura automáticamente passwordless-auth
como la branch local y sólo rastrea esta branch.


Si ejecutas cd pages/api
encontrarás el archivo auth.js
en la branch passwordless-auth
como se esperaba de la configuración anterior.
Conclusión
Puede que te estés quedando sin internet o sin espacio de almacenamiento, pero necesitas trabajar en una tarea en una branch específica. O puede que quieras clonar una branch específica con archivos limitados por varias razones. Afortunadamente, Git te proporciona la flexibilidad para hacer esto. Flexiona tus músculos y pruébalo, hay mucho más "Git" que aprender.
Uno a la vez, ¿vale? ✌
Traducido del artículo de Bolaji Ayodeji's - Git Clone Branch – How to Clone a Specific Branch