En esta entrada voy a explicar qué es el sistema de control de versiones Git, cómo usarlo y aprovechar sus ventajas y sus comandos básicos con detalle.
Contenidos
¿Qué es Git?
Git es uno de los sistemas de control de versiones distribuidos más populares. Fue creado por Linus Torvalds para facilitar el desarrollo del kernel de Linux y no ha dejado de crecer desde entonces. Se trata de software gratuito y open source, distribuido bajo la licencia GPL
Permite a los desarrolladores de software mantener y gestionar los cambios en el código que se producen en el tiempo. Hace posible revertir los cambios y volver a una versión anterior siempre que sea necesario, por ejemplo en el caso de introducir un bug. De esta forma, el desarrollador puede arreglar los errores de una manera más cómoda y práctica.
Además, Git proporciona mecanismos para trabajar sobre el mismo código de forma simultánea evitando los conflictos que puedan surgir. Un programador podría estar trabajando en un módulo del código mientras otro trabaja en otra funcionalidad.
Para conseguir trabajar de forma concurrente, cada desarrollador usa una rama distinta en la que el código evoluciona de forma independiente. Cuando se desean unir los cambios a la rama master o principal puede hacerse fácilmente.
Por último, no tiene por qué usarse solamente con código fuente. El sistema puede realizar un seguimiento de los cambios y de integridad en cualquier fichero, por lo que eres libre de usarlo de la manera que más te convenga.
¿Cómo funciona Git?
Para aprender a usar Git, a continuación vamos a explicar los comandos básicos más utilizados. Al principio, puede parecer una herramienta complicada, pero es una herramienta esencial y muy potente que no te arrepentirás de aprender.
Instalación de Git
El primer paso es instalar Git localmente. Podemos descargarlo desde la web oficial. Una vez instalado, podemos configurar nuestro nombre y correo con los siguientes comandos:
git config --global user.name oscarfmdc
git config --global user.email [email protected]
Si queremos inicializar un repositorio de git sobre un directorio usaremos el comando git init.
Clone
Este comando nos permite descargarnos a nuestro ordenador una copia de un repositorio de código remoto. Este repositorio puede ser público en internet, como ocurre con numerosos proyectos open source, o bien ser privado. Los servicios que alojan repositorios más conocidos son Github y Bitbucket. En estos, bastaría con copiar la dirección web para usar en el comando
git clone https://github.com/apache/spark
Checkout
Checkout permite seleccionar la rama sobre la que queremos trabajar. Por defecto, al clonar un proyecto, nos situará en la rama master. Para listar las ramas que existen en el proyecto, podemos usar el comando git branch, que también nos resaltará la rama en la que nos encontramos.
Es recomendable no trabajar sobre la rama master ya que es posible que introduzcas errores en el proyecto en el proceso de desarrollo.
Para seleccionar una rama existente:
git checkout nombre-de-rama
Para crear una nueva rama:
git checkout -b nueva-rama
Pull
Este comando permite descargar los nuevos cambios o commits que existen en el repositorio remoto a tu copia local. Es recomendable usar este comando cada vez que se vaya a trabajar en un proyecto para mantener la copia lo más actualizada posible y disminuir los conflictos.
Status
Lista el estado de la versión del proyecto, incluye todos los ficheros en los que se ha trabajado pero aún no se han incluido en el commit. Indica qué cambios se han realizado.
Debemos tener en cuenta la siguiente secuencia de cambios que existen en los ficheros gestionados con git:
- Modificados: Son los ficheros que han sufrido cambios pero no se encuentran en el commit. Aparecerán en color rojo.
- Staging: (git add) Son los ficheros que tienen cambios que quieres añadir al commit. Aparecerán en color verde.
- Committing: (git commit) Ficheros que has añadido al commit.
Log
Nos indica todos los commits realizados al repositorio. Es muy útil para obtener el identificador de un commit en concreto.
Add
Nos permite añadir los ficheros que queremos incluir en el commit. Para incluir todos los ficheros con cambios se puede usar el siguiente comando:
git add .
Para incluir solamente un fichero se puede añadir el nombre.
Commit
Añade un nuevo commit o conjunto de cambios agrupados en el repositorio local. Es necesario añadir un comentario que resuma los cambios. Este commit no se sincroniza automáticamente con el repositorio remoto.
git commit -m "comentario del commit"
Con git amend podemos modificar el mensaje de commit antes de hacer push al repositorio.
Revert
Nos permite revertir los cambios del último commit creando un nuevo commit. Nos permite volver atrás sin perder los últimos cambios.
Push
Sincroniza los commits locales con el repositorio remoto. Permite cargar todos nuestros cambios para que compañeros puedan usarlos.
Git Flow
Git Flow es una modelo de trabajo con ramas Git para facilitar y simplificar el desarrollo de software y el control de versiones en equipos con varios desarrolladores.
Este modelo aísla el nuevo trabajo de desarrollo en ramas llamadas feature. El trabajo puede ser en nueva funcionalidad o arreglos de bugs. Estas ramas desaparecerán para unirse a la rama de desarrollo llamada develop cuando el desarrollador esté satisfecho con el código.
En la rama develop se agregan todos los cambios que estén listos pero aún no se hayan publicado en una nueva versión del software. En el momento que se desee publicar una nueva versión, se hace sobre la rama llamada release.
Git vs SVN
Subversion o SVN es otro popular gestor de cambios muy usado en proyectos de software. Es más antiguo que Git y la principal diferencia es que SVN es centralizado.
En Git, cada desarrollador trabaja con una copia local del repositorio que contiene todo el histórico de cambios. Al realizar cambios, no es necesario sincronizarlos continuamente por lo que los comandos pueden ser más rápidos en ejecutar.
Por otro lado, SVN mantiene una copia para el desarrollador de los ficheros con los que está trabajando, manteniendo el resto en un servidor que actúa como repositorio centralizado.
Los repositorios de SVN pueden ser usados directamente con git-svn.
Siguientes pasos y formación
Para seguir aprendiendo paso a paso te recomiendo profundizar con alguno de estos cursos en español disponibles en Udemy:
GIT + GitHub: Todo un sistema de control de versiones de cero
Con este curso de 7 horas podrás aprender Git y Github paso a paso para mantener un repositorio remoto de código seguro. Incluye conceptos relativos a proyectos colaborativos y wikis.
Git y GitHub Completo Desde Cero
Con este curso aprenderás los conceptos básicos detrás de estas herramientas fundamentales para el desarrollo de software y control de versiones. Muy recomendado.
También, te recomiendo leer alguno de los siguientes libros:
- Pro Git
- Version Control with Git: Powerful tools and techniques for collaborative software development
Espero que esta entrada te haya ayudado a aprender los conceptos básicos y perderle el miedo a esta herramienta tan útil para los desarrolladores de software.
A continuación el vídeo-resumen. ¡No te lo pierdas!
Preguntas Frecuentes Git – FAQ
¿Qué es Git Flow?
Git Flow es una modelo de trabajo con ramas en Git para facilitar y simplificar el desarrollo de software y el control de versiones en equipos con varios desarrolladores.
¿Cuál es la diferencia entre Git y SVN?
La principal diferencia es que SVN es un sistema centralizado, el repositorio se encuentra en un servidor. Git mantiene una copia local del repositorio completo para cada desarrollador, por lo que no es necesaria la sincronización continua.
¿Por qué usar Git?
Git nos permite almacenar los cambios en el tiempo de un proyecto sobre un directorio. También, nos facilita trabajar sobre nuevos cambios sin alterar la versión estable y colaborar con otros desarrolladores de forma remota.