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).

Screenshot-2020-06-23-at-5.47.48-AM

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.

Screenshot-2020-06-22-at-2.47.53-AM
Todas las branches en el repositorio de freeCodeCamp

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
Screenshot-2020-06-22-at-4.51.56-AM

¿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.

Screenshot-2020-06-23-at-5.24.43-AM

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.

Screenshot-2020-06-23-at-5.28.06-AM

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>
Aquí -b es sólo un alias para --branch

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.

Screenshot-2020-06-23-at-5.30.01-AM
Screenshot-2020-06-30-at-3.27.31-AM

Opción Dos

git clone --branch <branchname> --single-branch <remote-repo-url>

o

git clone -b <branchname> --single-branch <remote-repo-url>
Aquí -b es sólo un alias para --branch

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.

Screenshot-2020-06-23-at-5.31.12-AM
Screenshot-2020-06-30-at-3.29.07-AM

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