Trabajo colaborativo con git

Continuaremos con otro artículo sobre el gestor de versiones git. Esta vez nos centraremos en el trabajo colaborativo con git. Como crear nuestro repositorio a partir del creado por otras personas. Recordemos que git no utiliza un repositorio centralizado sino que cada desarrollador tiene un repositorio completamente funcional.

Lo primero es obtener un repositorio de otro desarrollador en una máquina local. Para ello basta ejecutar con dirigirnos al directorio donde queramos nuestro nuevo repositorio y a continuación ejecutar

$ git clone /ruta/al/repositorio directorio-nuevo-repositorio

ejemplo

$ git clone /home/novanebula/repo1 repo2

Suponiendo que /home/novanebula/repo1 contuviera el repositorio antiguo git crearía un nuevo directorio llamado repo2 que contiene el nuevo repositorio.

Podemos trabajar con normalidad sobre el nuevo repositorio. Cuando terminemos y estemos satisfechos con los cambios ejecutamos

$ git commit -a

Para llevar estos cambios al repositorio original debemos ir a ese repositorio o solicitar a la persona que lo lleve que ejecute desde el directorio de este repositorio:

$ git pull /ruta/nuevo/repositorio branch

ejemplo

$ git pull /home/novanebula/repo2 master

Y las modificaciones en el segundo repositorio se aplicarán al primero. Si este contenía modificaciones locales hay que resolver conflictos. Por lo tanto pull hace dos tareas trae las modificaciones de otro repositorio y mezcla estas modificaciones en el repositorio donde se ha ejecutado.

Si el usuario del primer repositorio quiere analizar las modificaciones que se han introducido en el segundo antes de ejecutar un pull. Puede hacerlo ejecutando

$ git fetch /home/novanebula/repo2 master
$ git log -p HEAD..FETCH_HEAD

Es posible definir dentro de un repositorio otros repositorios locales para simplificar las ordenes entre ellos:

(repo1)$ git remote add /home/novanebula/repo2 repo2

Ahora para recoger los cambios en el repo2 podemos ejecutar

(repo1)$ git fetch repo2

Analizar los cambios

(repo1)$ git log -p HEAD..FECH_HEAD

y mezclarlos en el repositorio actual con:

(repo1)$ git merge repo2/master

o con

(repo1)$ git pull . remotes/repo2/master

Además desde repo2 se puede mantener una copia actualizada de las modificaciones en repo1simplemente ejecutando

(repo2)$ git pull

Esta opción ya estaba disponible desde que repo2 fuera creado con el comando clone

(repo2)$ git config –get remote.origin.url

Git también mantiene una copia del repo original bajo el nombre origin/master:

(repo2)$ git branch -r

Si repo2 tuviera que trabajar desde otro servidor podría hacerlo a través del protocolo ssh ejecutando este clone:

$ git clone host-address:/home/novanebula/repo1 repo2

Git también tiene un protocolo nativo o puede usar rsync o http. Pudiendo trabajar incluso al estilo de CVS con un repositorio central sobre el que todos los desarrolladores enviasen sus cambios.

Deja un comentario

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