jueves, 3 de febrero de 2011

A medio camino entre git y subversion: git-svn

Actualmente estoy trabajando en dos proyectos de software libre. Los repositorios de estos proyecto, utilizan subversion (svn) como sistema de control de versiones. Sin embargo, llevaba tanto tiempo oyendo hablar de git, que tuve ganas de acercarme un poco más y comprobar por mí mismo las bondades que se le atribuyen, pese a que también hay quien dice que no ofrece grandes ventajas respecto a svn para proyectos pequeños con pocos desarrolladores.

Así, desde unas semanas estoy utilizando git-svn. Evidentemente no es lo mismo, pero creo que sí es una buena aproximación, teniendo en cuenta que el repositorio con el que trabajo es svn, no interoperable con git (así, digamos que en mi copia local trabajo como si de un git se tratase, pero contando con pequeñas diferencias a la hora de realizar los commits, puesto que todo debe ser entendible para ese subversion). Pese a todo, he de decir que hasta el momento estoy bastante contento, descubriendo cosas nuevas que no podía hacer con svn (o al menos, desconozco si realmente se pueden hacer). Algunos ejemplos de esto son que de entre todo el conjunto de ficheros modificados en mi espacio local, puedo indicar cómodamente cuáles de ellos quiero incluir y cuáles no en cada commit, lo cual es tremendamente beneficioso de cara a la atomicidad de los cambios introducidos en un proyecto. Otra gran ventaja es que dentro de un mismo fichero, normalmente nos podremos encontrar con que hemos introducido, eliminado o modificado diferentes bloques de código; así, git también nos permite fácilmente seleccionar qué bloques de modificación dentro de un mismo fichero, queremos seleccionar para nuestro commit, o postponerlo para otro.

En cualquier caso, esto son tan sólo pequeños caramelos si nos fijamos en la potencia de otras muchas funcionalidades de git: merge, branches, etc. Tan sólo un pero le pongo por el momento a git-svn: si enviamos de una sola vez al repositorio todos los commits realizados sobre la copia local de trabajo, todos esos commits aparecerán en el repositorio con la misma hora (en realidad, con pequeñas variaciones, quizás de segundos), cuando realmente nos gustaría que apareciese la hora a la que se realizó el commit sobre la copia local. Pero realmente esto no es culpa de git-svn, ya que realmente en subversion, el timestamp del commit lo establece el servidor al subir los cambios al repositorio, mientras que en git, el timestamp se marca en la propia máquina de trabajo al hacer el commit en ella, y conservándose ésta al realizar el push.

No hay comentarios:

Publicar un comentario