Control de versiones con Git

En una de las cosas en las que tenemos que pensar cuando comenzamos a desarrollar un proyecto es en disponer de un sistema de control de versiones (SCM) que nos permita ver los cambios que se han realizado en las clases y los recursos, volver al estado en el que se encontraba el proyecto en un punto anterior, compartir los cambios con otros desarrolladores, etc.

Básicamente existen dos tipos SCM, los centralizados, en los que todas las versiones de los fuentes de los distintos proyectos se almacenan en un servidor, al que se conectan los distintos desarrolladores ( como Subversion, Cvs, etc). O los distribuidos, en los que cada desarrollador mantiene una copia de todas las versiones de los fuentes del proyecto en un repositorio local en su equipo, y además existe un repositorio centralizado, que sirve para centralizar los cambios de los distintos repositorios locales ( como Mercurial o Git).   

En este artículo vamos a hablar sobre Git, aprenderemos a utilizarlo por línea de comandos y en Eclipse. También utilizaremos https://github.com/ que es servicio de hosting de aplicaciones, un repositorio de código gratuito donde podemos subir nuestros proyectos.

Git es un software de control de versiones diseñado por Linus Torvalds. Es de gestión distribuida, cada desarrollador una copia local del historial del desarrollo entero, los cambios se importan como ramas adicionales y pueden ser fusionados. Es de código abierto y distribuido.

Instalar Git

Para instalar git en Ubuntu, basta con ejecutar lo siguiente:

Para instalar Git en Windows, descargamos el .exe de la página oficial de Git y lo ejecutamos.

Instalando Git en Windows

Instalando Git en Windows (pinchar para agrandar)

Leemos la licencia y aceptamos los términos, indicamos un directorio de instalación y seleccionamos los componentes a instalar (yo he dejado los que vienen marcados por defecto).

Selección de componentes

Selección de componentes (pinchar para agrandar)

Indicamos que queremos ejecutar Git desde el terminal de Windows

Ejecutar git desde el terminal (pinchar para agrandar)

Ejecutar Git desde el terminal

Continuamos pulsando en “Next” hasta completar la instalación. Abrimos un terminal y ejecutamos “git –version” para comprobar que lo tenemos correctamente instalado:

Comprobando la instalación

Comprobando la instalación

Instalar el plugin de Git en Eclipse

Bien, ya tenemos instalado el cliente de Git en nuestro equipo. A continuación vamos a instalar el plugin de Git en Eclipse. Para ello accedemos a “Eclipse Marketplace” y buscamos “git”. Se nos mostrará algo parecido a lo siguiente:

Instalado EGit

Instalado EGit (pinchar para agrandar)

Pulsamos el botón de instalar, aceptamos los términos y condiciones y finalizamos. Así de sencillo.

Primeros pasos con Git

Lo primero que vamos a hacer es crear un repositorio local de Git. Podemos hacerlo por línea de comandos, usando el programa de Git, o bien usando EGit en Eclipse. Vamos a ver como. 

Crear un repositorio desde Windows

Creamos una carpeta en nuestro equipo, yo la he creado en “C:\_MisCosas\git”. Pinchamos con el botón derecho en la carpeta y en el menú seleccionamos “Git init here”.

Repositorio local desde Windows

Repositorio local desde Windows

Nos ha creado un directorio “.git“, con los siguientes archivos:

Archivos del repositorio local

Archivos del repositorio local

Crear un repositorio por línea de comandos

Vamos a hacer lo mismo por línea de comandos. Lo primero que voy a hacer es renombrar la carpeta “.git” que creé anteriormente, ya que volveremos a crearla por línea de comandos. Abrimos un terminal, nos colocamos en la carpeta “C:\_MisCosas\git” y ejecutamos el siguiente comando:

De nuevo nos ha creado de nuevo la carpeta “.git”. Si comparamos el contenido de dicha carpeta, con la carpeta anterior que habíamos renombrado, vemos que contiene exactamente lo mismo.

Crear un repositorio con EGit

Finalmente vamos a hacer lo mismo con Eclipse. Desde la perspectiva “Git Repository Exploring”, seleccionamos “Create a new local Git repository”.

Explorador de repositorios

Explorador de repositorios

Nos pedirá que seleccionemos un directorio y que le demos un nombre, creará una carpeta con dicho nombre en el directorio. Si marcamos la casilla “Create as base repository” añadirá el repositorio a esa carpeta, y si la dejamos sin marcar, creará una carpeta “.git”.

Selección del directorio

Selección del directorio

NOTA: Es mejor dejar la opción sin marcar, para que nos cree la carpeta .git, ya que si creamos el repositorio en otra carpeta distinta de “.git” el plugin de Eclipse no la encuentra y da algunos problemas.

Ya tenemos el repositorio local.

Repositorio local

Repositorio local

Configurar un usuario

Lo que vamos a hacer a continuación, es configurar el usuario, para que Git pueda saber que usuario ha hecho “commit“. Para ello desde la línea de comandos ejecutamos lo siguiente:

Con “–global”, indicamos que queremos usar este usuario a nivel general. Esta información se nos habrá almacenado en un fichero “.gitconfig” en el directorio home del usuario. Se puede configurar a nivel de proyecto situándonos en el proyecto en concreto y no poniendo la opción “–global”.

Cuando vayamos a hacer “commit” en Eclipse, nos pillará este usuario. Si no especificamos ninguno, nos preguntará que usuario queremos utilizar para hacer “commit“. Aunque esto lo veremos más adelante.

Versionar un proyecto

A modo de ejemplo, vamos a versionar el proyecto de prueba que utilizamos en el artículo sobre los flujos de navegación en JSF, aunque podría tratarse de cualquier otro proyecto. Para ello, pulsaremos desde Eclipse con el botón derecho sobre el el proyecto y seleccionaremos “Team >> Share Proyect…” y seleccionamos como tipo de repositorio “Git”.

Configurando el repositorio en Eclipse

Configurando el repositorio en Eclipse (pinchar para agrandar)

En “Repository”, seleccionamos el que habíamos creado anteriormente y pulsamos “Finish”. Si nos fijamos en la parte de abajo de la ventana anterior, vemos que el plugin, nos va a mover el proyecto de la carpeta indicada en “Current Location” a la carpeta “Target Location”. Es decir, desaparecerá del “workspace” que estuvieseis utilizando. Para evitar esto, podríamos haber seleccionado anteriormente la carpeta de nuestro workspace para crear el repositorio de Git.

Si nos vamos al explorador de paquetes de Eclipse, veremos que ahora nos aparecen unos interrogantes en los archivos de nuestro proyecto. Esto nos indica, que los archivos todavía no se han subido al repositorio Local.

Añadir archivos al índice

Vamos a añadir los ficheros de nuestro proyecto al índice, es decir, que ficheros queremos que Git tenga en cuenta cuando queramos hacer “commit” o cualquier otra operación. Ejecutamos lo siguiente por línea de comandos:

Con la primera sentencia estamos añadiendo el fichero “pom.xml” y con la segunda estamos indicando una carpeta, de manera que se nos indexará todos los paquetes incluidos en dicha carpeta. Ponemos –v para que muestre por consola las acciones.

Si utilizamos la orden “git status”, podremos comprobar, que archivos se han indexado y cuales no, por ejemplo:

Como se puede ver, nos indica que hay ficheros “.classpath”, etc. que no están indexados. Podríamos añadir un fichero “.gitignore” al nivel del directorio que queremos ignorar, con el contenido de lo que queremos ignorar, por ejemplo “target/”.

Para indexar los archivos el Eclipse lo que haremos es seleccionar los archivos que nos interese en el explorador de paquetes y pinchar con el botón derecho “Team >> Add to index”.

Añadir archivos al índice

Añadir archivos al índice

Si observamos de nuevo el explorador de paquetes, nos aparecerá una pequeña cruz verde al lado de cada archivo indexado. También podemos usar la vista de sincronización “Team >> Sinchronize workspace”.

Subir los cambios al repositorio local

Lo que hacemos normalmente en un repositorio centralizado como “Subversion”, por ejemplo, es subir nuestros cambios al servidor, de modo que el resto de desarrolladores puedan ver nuestros cambios. En Git, cuando realizamos un “commit” lo que estamos haciendo es subir nuestros cambios al repositorio local. Ni siquiera tenemos que estar conectados a una red.

Para realizar un commit por línea de comandos, ejecutaremos lo siguiente:

Con –a (all) estamos indicando que suba todos los ficheros modificados o eliminados. Los ficheros nuevos no se subirán, a no ser que antes los hayamos añadido al índice con “add”. Ponemos –v (verbose), y –m para indicar el mensaje con el que hacemos commit.

Con “git log”, podemos ver los cambios que se han hecho:

Para ver los cambios que se han hecho desde el último commit:

Hay que comentar, que también se puede hacer commit desde el propio explorador de Windows pulsando con el botón derecho sobre el archivo a subir y seleccionando “Git commit tool”, que es una herramienta que está bastante bien.

Git Gui

Git Gui (pinchar para agrandar)

Para hacer commit en Eclipse simplemente seleccionaremos “Team >> Commit”. Seleccionaremos lo ficheros que queramos y pulsaremos el botón Commit

Commit en EGit

Commit en EGit (pinchar para agrandar)

También podemos usar la perspectiva de sincronización para estas operaciones. Para ver el historial de cambios “Team>> Show History”.

Historial EGit

Historial EGit (pinchar para agrandar)

Como se puede ver, nos indica que hay un commit sobre la rama “master”, que es la rama que crea por defecto. Para ver las diferencias entre commits, podemos usar “Compare with”, o bien el histórico, etc., como en cualquier control de versiones.

Volver a una versión anterior

Por línea de comandos, primero introducimos “git log” y vemos el historial de cambios.

Vemos que en cada commit, aparece un número que lo identifica. Para volver a un punto determinado, copiamos ese hash y ejecutamos:

Hemos dejado el branch master y nos hemos movido a un punto anterior de manera temporal. Podemos ahora ver el código, hacer pruebas etc, incluso nuevos commits, pero si queremos conservar los cambios que hemos hecho, tenemos que crear otra rama, tal y como se indica en la sentencia que aparece sobre estas líneas.

Para volver a la rama master tendremos que ejecutar lo siguiente:

Para volver a un punto anterior en Eclipse, lo que hacemos es consultar el histórico con “Team >> Show history”, pinchar con el botón derecho en el punto del histórico al que queramos volver y hacer commit.

Como en el caso anterior, nos habremos movido de manera temporal. Para volver a la rama master, botón derecho sobre el proyecto “Team >> Switch to >> Master

Cambiar de rama

Cambiar de rama

Si lo que en realidad queremos es volver a un punto anterior, para continuar a partir de allí y descartar todo lo que se haya hecho desde ese punto en adelante, desde línea de comandos introducimos lo siguiente:

Ahora si ejecutamos “git status” si que nos indicará que estamos en la rama master. Lo que ha ocurrido es que nos hemos situado en un punto del histórico y se ha perdido todo que había a partir de ese punto.

Para hacer lo mismo desde Eclipse, desde el histórico, hacemos clic derecho en el punto al que queremos volver y seleccionamos “Reset >> Hard”.

Volver a un punto anterior y descartar los cambios

Volver a un punto anterior y descartar los cambios

Nos paramos aquí, ya que éste ha sido un artículo bastante extenso. En el próximo artículo hablaremos sobre Github y continuaremos viendo más aspectos de este sistema de gestión de versiones.

Si te gustó el artículo, no dudes en dejar un comentario.

2 comentarios:

  1. Excelente introducción.

  2. Muy buena las introducción.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *