Este es un artículo de esos básicos donde los haya que tanto nos gustan. Se dan por sabidas demasiadas cosas en la vida y refrescar de vez en cuando algunas de esas tan obvias nunca está de más. Al menos a nosotros nos gustaría tenerlo a mano y por eso nos hemos decidido a redactarlo.
¿Qué es el control de versiones?
Encontrareis que se refieren a éste como VCS (Version Control Systems), SCM (Source Code Management), RCS (Revision Control System), DVCS (Distributed VCS).
Permite llevar un registro y administrar cualquier cambio en un archivo o conjunto de archivos a lo largo del tiempo de un proyecto software, de modo que puedas recuperar versiones específicas más adelante.
- Sistema de control de versiones locales. Consiste básicamente en copiar los archivos a una carpeta nueva, indicando la fecha y hora, si es el caso. La típica copia manual de toda la vida. Aunque es el sistema más básico también es el más propenso a errores. Para evitarlos se desarrollaron los VCS (Version Control Software) locales que contienen una base de datos sencilla en la que llevar el registro de todos los cambios realizados a los archivos. Todos los cambios se quedan en el ordenador local.
- Sistema de control de versiones centralizados. Uno de los ejemplos más conocidos de estos sistemas es Subversion. Éstos nacen de la necesidad de compartir archivos entre desarrolladores Se trata de un único servidor que aloja todos los archivos versionados y los clientes pueden descargar los archivos desde ese servidor central.
- Sistema de control de versiones distribuidos. El desarrollador utiliza un cliente para descargar todo el repositorio en su equipo local. Éste trabaja de manera independiente, almacenando los cambios en su propio equipo y cuando quiera mezclar los cambios, solucionará los conflictos que se presenten.
¿Qué es Git?
Es un sistema distribuido de control de versiones y código abierto usado en el desarrollo de software para guardar los cambios realizados en un proyecto, mantener un historial y navegar a través del mismo en cualquier momento.
- Se puede utilizar tanto en Windows como Ubuntu (Linux) y Mac.
- Hay multitud de clientes para trabajar con Git, cada uno de ellos con su propia implementación de la interfaz.
- Con Git puedes hacer casi todo lo que quieras sin necesidad de conexión a Internet, puedes hacer cambios y confirmarlos hasta que puedas subir el código.
- No es posible la perdida de información durante la transmisión, ni la corrupción de ficheros gracias a una suma de comprobación antes de ser almacenado.
Un proyecto de Git está formado por tres secciones principales:
- Directorio de Git (Git directory). Es donde Git guuarda los metadatos de tu proyecto. Es la parte más importante de Git.
- Directorio de trabajo (working directory). Es una copia de una versión del proyecto. Al estar almacenados en tu equipo, podrás modificarlos y/o usarlos a tu antojo sin que se vean reflejados en el directorio remoto.
- Área de preparación (staging area). Es un archivo ubicado en tu directorio de Git, que guarda información acerca de lo que va a añadirse en tu próxima confirmación (commit).

El flujo de trabajo básico en Git es algo así:
- Editas una serie de archivos en tu directorio de trabajo.
- Preparas los archivos que quieras subir al directorio, añadiéndolos a tu área de preparación.
- Confirmas los cambios, lo que toma los archivos tal y como están en el área de preparación, y guarda esas instantáneas de forma permanente en tu directorio de Git.
Git define tres estados principales para los archivos:
- Confirmado (commited). Los datos del archivo están guardados en tu base de datos local.
- Modificado (modified). Se ha modificado el archivo pero todavía no lo se ha confirmado en tu base de datos local.
- Preparado (staged). Se ha marcado un archivo modificado en su versión actual para que vaya en tu próxima confirmación.
Instalar Git en Windows
Hasta hace bien poco, Windows no diposnía de una consola de comandos muy amigable y que soportase comandos Unix, aunque esto está cambiando, Git nos facilita la herramienta Git Bash. Se trata de la consola de comandos específica de Git que nos permitirá escribir comandos de Linux básicos. Tienes que descargar el archivo exe del instalador desde la página gitscm.com o https://gitforwindows.org/
Solo tienes que seguir el asistente de instalación e ir pulsando Siguiente.
Instalar Git en Linux
Abre un terminal Ctrl+Alt+t y usa los siguientes comandos.
Si estás en Fedora, puedes usar yum:
Código
O si estás en una distribución basada en Debian como Ubuntu, prueba con apt-get:
Código
Para otros tipos de Unix podéis encontrar en la página web de Git las instrucciones a seguir.
Instalar Git en MacOS
La forma más sencilla es instalando la herramienta de línea de comandos Xcode la cual trae Git entre otras cosas. Simplemente intenta ejecutar Git desde un terminal.
Usa el comando:
git --version
Si no lo tienes instalado, te preguntará si deseas instalarlo. Solo sigue los pasos del asistente de instalación.
También puedes instalarlo descargando un instalador binario de Git para OSX en la página web de Git.
Si tienes instalado el gestor de paquetes brew puedes hacer uso del comando:
brew install git
Primeras configuraciones en Git
Una vez instalado Git es necesario hacer algunas configuraciones que solo harás una vez y se mantendrán entre actualizaciones.
Para establecer variables de configuración que sirven para controlar el funcionamiento y el aspecto de Git, tenemos la herramienta llamada git config.
En los commits de Git se usa tu nombre de usuario y la dirección de correo electrónico, por ello necesitaremos establecer esta información. Estos datos son transmitidos en cada commit, de manera que queda un registro del usuario que hizo cambios en un archivo.
Código
Por defecto Git establece como editor de texto Vim, pero puede ser que no sea de tu agrado o que te sientas más cómodo con otra herramienta así que puedes modificarlo con los siguientes comandos (tabla con el comando para distintos editores):
Visual Studio Code → git config --global core.editor “code --wait”
emacs → git config --global core.editor “emacs”
Atom → git config --global core.editor “atom --wait”
Por último, si quieres comprobar la configuración usa el siguiente comando para que te muestre las propiedades configuradas:
git config --list
Comandos útiles
$ git help <command>
Obtener ayuda consultado la página del manual. Puedes acceder aun sin tener conexión.
$ git init
Crea las estructuras necesarias para albergar un repositorio de Git.
$ git clone <url>
Permite clonar un repositorio Git existente. Clonar implica descargar el repositorio completo incluido el directorio de Git, lo que nos permitirá trabajar con éste.
$ git status
Permite visualizar el estado de los cambios en el directorio de trabajo y en el área de preparación comparando con el repositorio. Muestra una lista de los archivos modificados o añadidos.
$ git add <fichero>
Para guardar o aprobar (commit) ficheros en nuestro repositorio Git, primero se necesita añadirlos al área de preparación. Los usuarios “mueven” (también se refiere a ello como “promueven/promote”) cambios desde el directorio de trabajo al área de preparación, antes de aprobarlos/commit hacia el repositorio. El comando “git add .” permite registrar todos los cambios del directorio de trabajo.
$ git commit
Una vez el fichero ha sido añadido al área de preparación, se necesita que sea aprobado (commited) hacia el repositorio. El comando git commit -m “mensaje commit” mueve los ficheros desde el área de preparación hacia el repositorio con un mensaje que puede servir para añadir información de contexto o motivo de los cambios. Los ficheros sobre los que no hayas ejecutado git add previamente, es decir los que están sin preparar, no se serán incluidos en la confirmación.
$ nano .gitignore
El fichero .gitignore se crea en la raiz del directorio de trabajo en el momento de ejecutar git init. Este fichero contiene reglas sobre qué archivos y/o carpetas deben ser ignorados por git. Cualquier fichero que ignoremos no aparecerá en la salida de un git status y además será ignorado cuando lancemos un comando git add. Esto no quiere decir que los ficheros ignorados sean eliminados de tu equipo local, permanecerán ahí pero nunca se subirán al repositorio.
$ git diff <fichero>
Permite comparar cambios en el directorio de trabajo contra una versión confirmada anteriormente. Una vez que los cambios están en el área de preparación no se mostrarán en la salida de git diff.
$ git log
Permite visualizar el histórico del repositorio, mostrándonos los mensajes de los commit anteriores, la fecha y hora en que se realizaron, el usuario y el identificador del commit.
$ git show <identificador del commit>
Permite ver los cambios realizados en cada commit. Si no se especifica identificador del commit, muestra los cambios del último.
$ git push <nombre del repositorio remoto> <nombre de la rama>
Podemos subir todos nuestros commit de una sola vez cuando estemos listos para compartirlos a través de este comando.
$ git pull
Permite sincronizar cambios de un repositorio remoto en nuestra versión local. Si el repositorio tiene cambios sobre archivos que también hemos modificado en nuestro local se producirá un conflicto. Git intenta solucionar estos conflictos pero cuando no es capaz de hacerlo por sí mismo, creará una rama provisional con esta versión, donde parte de los ficheros se encuentran en un estado incoherente. Para solucionar esta situación se hace uso del comando git mergetool
$ git mergetool
Ejecutará la herramienta de mezclado (mergeo) que tengamos configurada en nuestra propiedad merge.tool de git config –list. Existen multitud de herramientas que nos ayudan a solucionar conflictos (meld, kdiff3, etc.) y aquí dependerá de la que utilicemos.
$ git checkout -b “<nombre de la rama>”
Permite crear una rama en tu directorio local. Esta rama será una copia de la rama en la que te encuentres y mantendrá los cambios diferenciados.
$ git checkout “<nombre de rama existente>”
Permite moverte de una rama a otra.
$ git checkout — “<nombre de fichero o . >”
Permite descartar los cambios de un fichero o ficheros que no han sido preparados (staged) a la anterior versión preparada.
$ git branch
Muestra todas las ramas existentes.
$ git branch -D “<nombre de rama existente>”
Elimina una rama. Muy útil si no queremos acabar con un número inmanejable de ellas.
Existen multitud de comandos más, nosotros hemos querido traeros algunos de los más habituales y con los que podéis hacer casi todo lo básico.
Diferencia entre Git y GitHub
Como hemos comentado previamente, Git es un sistema de control de versiones usado en el desarrollo de software para llevar un control sobre el código fuente de un proyecto, mantener un historial y navegar a través del mismo en cualquier momento.
GitHub es un servicio para alojamiento de repositorios de software gestionado por el sistema de control de versiones Git. Se trata de un proyecto comercial en el que se pueden alojar repositorios públicos o privados. Los públicos son gratuitos y los privados requieren de una cuenta comercial o plan de hosting de pago.
Si te decides a usar GitHub como servicio web para repositorios Git, vas a necesitar crearte una cuenta de usuario gratuita. Accede a la página oficial de GitHub y registrate. Acuérdate de verificar la cuenta a través del correo electrónico que te harán llegar.
Si no os convence GitHub, existe una alternativas de servicios web que ofrecen repositorios Git en el mercado como: GitLab, BitBucket o Coding.
Conclusión
Esperamos que os sirva para dar vuestros primeros pasos en Git y que conozcáis un poco más esta herramienta. Podéis dejar vuestras dudas a través del formulario de contacto.
Súper interesante y de mucha ayuda, gracias por la guía!!