Git y Github

En el artículo anterior, hemos estado trabajando con el repositorio local. Cuando queremos trabajar con otros desarrolladores, necesitamos un repositorio centralizado al que subir los cambios del repositorio local y en el que podamos ver las modificaciones de otros desarrolladores. Si de lo que se trata es de un repositorio de código corporativo, en el que queramos tener un control total de acceso de lectura o escritura, podemos usar Gitosis. Nosotros usaremos Github, que permite dar de alta repositorios “opensource”, es decir, el código que subas al repositorio lo puede ver cualquier desarrollador, y no se puede restringir el acceso de lectura a no ser que tengas una cuenta de pago.

Primeros pasos con Github

Lo primero que vamos a hacer para trabajar con Github es crearnos una cuenta en su página web, para ello accedemos a su página web y daremos de alta una cuenta “Sing up for free”. Una vez creada la cuenta tendremos algo como lo siguiente:

Github

Github (pinchar para agrandar)

GitHub usa una clave ssh para establecer una conexión segura entre nosotros y el servidor de Git. Así que ahora lo que tenemos que hacer para dar acceso a nuestra máquina al servidor de Github, es generar un par de claves ssh. En Linux es sencillo, ejecutando el comando:

Nos solicitará una ubicación para la clave, normalmente estará en “~/.ssh/” y una contraseña. Abriremos el fichero id_rsa.pub para copiar su contenido y ponerlo en nuestra cuenta de Github, (ya veremos como).

Si lo hacemos desde Windows, como hemos instalado Git en nuestro equipo, podemos abrir el programa desde el explorador de Windows, pinchando con el botón derecho en cualquier paquete y seleccionando “Git Gui”. Se nos abrirá el programa. Pinchando en el menú “Help >> Show SSH key” podremos generar las claves ssh si no las hemos generado todavía:

Crear claves SSH

Crear claves SSH (pinchar para agrandar)

Pulsamos el botón “Generate Key“, que nos pedirá una contraseña para acceder a la clave privada (lo mejor es dejarla vacía, para que no la pida cada vez que accedamos) y nos generará las claves. Como se puede ver, nos ha creado la clave en “~/.ssh/id_rsa.pub”. Podemos pulsar en “Copy to Clipboard” para copiarla al portapapeles sin necesidad de abrir el archivo.

Ahora nos vamos a nuestra cuenta de Github y pinchamos en el icono “Accounts settings”, seguidamente en el menú “SSH Keys” y pulsaremos el botón “Add SSH Key”:

Añadiendo la clave pública en Github

Añadiendo la clave pública en Github (pinchar para agrandar)

Ponemos un título, pegamos la clave que teníamos en el portapapeles y pulsamos el botón.

Crear el repositorio y subir el proyecto

El siguiente paso será crear nuestro repositorio en la cuenta de Github. Para ello, pinchamos en el icono “Create a new repo”. Ponemos como nombre del repositorio, el nombre del proyecto que vayamos a subir, en este caso “EjemploJsf”, introducimos una descripción y pulsamos el botón.

Se nos mostrarán los comandos para subir nuestro proyecto y otra información. Lo principal es la url de nuestro proyecto.

Acceso al repositorio

Acceso al repositorio (pinchar para agrandar)

En una consola añadimos el repositorio, le damos un alias: “origin”.

El paso siguiente es subir todo lo que tenemos en el repositorio local. Para hacer eso, usamos “push

Le decimos que sí y continuamos.

Ya nos ha subido el proyecto al repositorio. Ahora si accedemos a él a través de la url https://github.com/Notodocodigo/EjemploJsf podemos ver los archivos de nuestro proyecto.

Proyecto en Github

Proyecto en Github (pinchar para agrandar)

Si en lugar de añadir el repositorio remoto por línea de comandos, lo queremos hacer desde Eclipse, abriremos la perspectiva “Git Repository Exploring”. Se mostrará el repositorio local, pinchamos en “Remotes” con el botón derecho y seleccionamos “Create Remote…

Creando repositorio remoto con EGit

Creando repositorio remoto con EGit

Se nos abrirá una ventana donde introduciremos el alias como en el caso anterior e indicaremos que configure el push

Nuevo repositorio remoto

Nuevo repositorio remoto (pinchar para agrandar)

Seguidamente se abrirá una ventana en la que pulsaremos en el botón “Change” para introducir la url de nuestro repositorio. En la nueva ventana que aparece, nos parsea la url que habíamos copiado, así que pulsamos el botón “Finish

Selección del uri

Selección del uri del repositorio (pinchar para agrandar)

Tenemos que indicar ahora la rama a la que haremos referencia, así que pinchamos en el botón “Add” del apartado “Ref mappings

Selección de la rama

Selección de la rama (pinchar para agrandar)

Cuando empecemos a editar “Remote branch” si pulsamos “Ctrl+espacio” nos mostrará las ramas remotas a las que nos podemos conectar. Se puede utilizar el comodín * para seleccionar todas las ramas, por ejemplo, podríamos haber seleccionado “refs/heads/*”. Pulsamos “Ok” y tendremos lo siguiente.

Configurando el push

Configurando el push (pinchar para agrandar)

Ahora podemos simplemente salvar, o salvar y hacer un push, como hicimos por línea de comandos. Elegimos esta última opción y subirá nuestro proyecto.

Actualizar el repositorio local con los cambios del servidor

Hemos visto como se suben los cambios al repositorio local con “commit”. También hemos visto como se sube nuestro código al servidor con “push”. Ahora vamos a ver como nos traemos los cambios que hay en el servidor a nuestro repositorio local. Para ello se usa el comando “pull”.

Como cuando creé las claves ssh, puse una contraseña para la clave privada, me pregunta por ella. En este caso, vemos que no hay ningún cambio en el servidor. Si hubiera habido cambios, realizaría un merge en el repositorio local, con lo que hay en el repositorio remoto.

Ahora vamos a ver cómo hacemos “pull” desde Eclipse. En el apartado anterior, cuando configuramos el repositorio remoto, habíamos configurado el “push”, que es el que controla los cambios. Necesitamos configurar ahora el “fetch”, que lo que hace es buscar todos los índices o enlaces que se hayan creado en el repositorio, como por ejemplo, cuando otro desarrollador sube una nueva rama de desarrollo. En resumen, digamos que “fetch” busca los nuevos elementos que existan en el repositorio y “pull” nos trae esos cambios.

Para configurar el “fetch”, pulsamos con el botón derecho sobre “Remotes” y seleccionamos “Configure Fetch…

Configurar el fetch en EGit

Configurar fetch en EGit

En la ventana que se nos abre pulsamos el botón “Add” y como en el caso anterior, nos situamos en la casilla “Source” y pulsamos “Ctrl+espacio”, con lo que eclipse, buscará las ramas que podemos añadir. Seleccionamos la que nos interese, o bien, utilizamos el comodín * para seleccionar varias ramas como en el caso anterior.

Selección de fuente

Selección de fuente

Pulsamos en finalizar y como en el caso anterior, podremos simplemente salvar, o salvar y hacer el fetch. Seleccionamos esta última opción. Una vez hecho esto ya podremos hacer un pull, clic derecho en el repositorio y “pull”…. Y ocurre lo siguiente:

Error ah hacer pull

Error ah hacer pull

Este es un problema que se da cuando creamos y subimos el repositorio, es decir, cualquier otra persona que se baje el proyecto que hemos subido, no tendrá este problema. Para solucionarlo, hacemos clic derecho en el repositorio, seleccionamos “Properties” y en la ventana que se nos abre pulsamos el botón “Add Entry…”. Hay que añadir “branch.master.remote” con el valor “origin” y “branch.master.merge” con el valor “refs/heads/master

Añadiendo una propiedad

Añadiendo una propiedad

El resultado es el siguiente:

Propiedades del repositorio

Propiedades del repositorio (pinchar para agrandar)

Pulsamos en “OK”. Ahora ya si podremos hacer un pull, haciendo clic derecho sobre el proyecto o sobre el repositorio. Cuando lo hacemos nos mostrará lo siguiente:

Resultado del pull

Resultado del pull

Lo que nos indica que no ha habido ningún cambio.

Aquí concluye este artículo, en el siguiente veremos los temas pendientes sobre Git y cerraremos esta serie. Aprenderemos a clonar repositorios y el manejo de ramas.

Si te ha gustado el artículo, no dudes en dejar un comentario.

Deja un comentario

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