Empleando git y subversion

Emplear dos sistemas de control de versiones parece algo fuera de lugar a la hora de llevar un proyecto. Sin embargo muchas pueden ser las causas en las que emplear subversion y git puede ser muy provechoso. Por ejemplo en el caso de estos dos escenarios el empleo de ambos sistemas de versionado esta justificado:

– Repositorio central con subversion y posibilidad de trabajar offline con git en máquina local. Cuando el desarrollador vuelva a estar online puede comitear los cambios al repositorio central de subversion. Con tu copia de trabajo puedes trabajar offline puedes decir. Si pero no tienes ninguna de las capacidades de un control de versiones disponible.

– Repositorio central con subversion donde no se desea aumentar el número de ramas. Los desarrolladores pueden hacerse con el código en git y hacer ramas y otros repositorios clonados mientras dure el desarrollo de una característica específica luego se reúne el código y se comitea a subversión.

Veamos como puedes mezclar lo mejor de los dos mundos.

Para poder empezar debemos tener instalado subversion git y git-svn. En distros tipos debian/ubuntu podemos ejecutar:

$ sudo apt-get install subversion git git-svn

Para conocer un poco de subversion sigue la serie de artículos sobre subversion.

Para conocer un poco de git visita este tutorial introductorio sobre git

Ok pues partimos de que tenemos la rama principal de desarrollo (trunk) con un repositorio central subversion en esta url

http://svn.midominio.com/miproyecto/trunk

creamos un directorio para nuestra copia de trabajo y entramos en ella

$ mkdir working-copy
$ cd working-copy

A continuación para inicializar el repositorio git ejecutamos:

$ git-svn init http://svn.midominio.com/miproyecto/trunk

Para traernos el código de la revisión HEAD:

$ git-svn fetch -rHEAD

Trabajamos con normalidad con git y comiteamos los cambios primero en este repositorio:

$ git commit -m “Cambios en git”

Si queremos actualizar el repositorio gitr respecto a posibles cambios en el repositorio central ejecutamos

$ git-svn rebase

Y si queremos comitear a subversion

$ git-svn dcommit

Si encontramos un conflicto debemos resolverlo de la siguiente manera

Tras comitear en git

$ git commit -m “Tal vez encontremos conflictos”

Pedimos actualización (si primero ejecutamos un git-svn dcommit nos dará error ‘Transaction is out of date’):

$ git-svn rebase

Esto nos informará de los ficheros con conflictos. Editamos el/los ficheros con conflictos hasta resolverlos. Luego comiteamos en git estos cambios con:

$ git add .

y luego

$ git rebase –continue

para finalmente ejecutar:

$ git-svn dcommit

Que llevará los cambios al repositorio central de subversion.

Deja un comentario

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