git

danigm's picture

Cuando un sistema de control de versiones nos da un conflicto en una mezcla suele ser un fastidio, porque eso quiere decir que toca hacer la mezcla a mano. Por suerte existen buenas herramientas que sirven para facilitar la tarea.

Yo como soy usuario de vim, pues suelo usar vimdiff para ver diferencias y mezclar de un fichero a otro.

Me acabo de hacer un script para cuando tengamos un conflicto en git poder abrir directamente las dos versiones de un fichero conflictivo, versión tuya y versión externa, a la vez en un vimdiff con un solo comando. Lo he llamado gitconflict:

  1. #!/bin/bash
  2.  
  3. git show :2:$1 > $1.ours
  4. git show :3:$1 > $1.theirs
  5.  
  6. vimdiff $1.ours $1.theirs

El script este crea dos ficheros el .ours y el .theirs con las dos versiones correspondientes.

Y para usarlo:

  1. $ gitconflict fichero_conflictivo

danigm's picture

Ayer estuve haciendo algunas cosillas con gitpython y cairo para hacer unas gráficas chulas usando la información que nos ofrece un repositorio git. He creado un proyecto en gitorious con estos scripts.

Lo más chulo es el script gittimeline.py, que basandose en los commits y las estádisticas de estos commits muestra una galaxia de commits. Se van mostrando bolitas de colores que simbolizan a cada committer. El tamaño de la bola depende del número de cambios hechos y con el tiempo se van difuminando las bolas. Cuando un committer es regular, la bola que lo representa se va acercando al centro.

Aquí hay un vídeo de cómo se vería:

La forma de usar el script es la siguiente:

gittimeline.py path-to-repo [update-time-ms] [since-date]

Para repositorios grandes recomiendo usar el parámetro since-date para que no tarde una eternidad en empezar. La fecha se tiene que especificar con el formato 1970-01-01.

danigm's picture

El otro día leí en reddit que emacs se pasaba a bazaar y en los comentarios leí que bazaar no es lo mejor del mundo. Yo ya lo sabía, y después de haber tratado durante algún tiempo con bazaar me decidí a cambiar todos mis repositorios a git.

¿Cómo hacer eso? pues fué más fácil de lo esperado, con el plugin de bazaar fastimport y el comando git import. Se instala fácilmente descargandolo "bzr branch lp:bzr-fastimport fastimport" y copiando el directorio a "~/.bazaar/plugins/". Ahora deberíamos tener accesible el comando bzr fast-export.

En mi servidor tengo todas mis ramas dentro de un directorio llamado branchs y quería crear un directorio llamado gits con los mismos proyectos pero portados. Para ello me he creado un script que se encarga de hacer todo lo necesario:

  1. #!/bin/bash
  2.  
  3. root=$PWD
  4. cd $root/branchs
  5. for i in *
  6. do
  7. newdir=$root/gits/$i.git
  8. mkdir $newdir
  9. cd $newdir
  10. git init --bare
  11. bzr fast-export $root/branchs/$i | git fast-import
  12. git update-server-info
  13. done

Esto exporta todos los repositorios de bazaar a git.

Y para mostrar todas las ramas de git que tengo me he instalado gitPHP, porque intenté configurar gitweb, pero con lighttpd no he podido hacer funcionar este porque es un script perl, he intentado seguir las instrucciones para configurar gitweb con lighttpd, pero no me muestra la página, me da el fichero para descargar.

Sobre la decisión de usar git en lugar de bazaar, es una decisión totalmente arbitraria, con poquísimo fundamento, bien podría haber sido mercurial o lo que sea, pero git está siendo utilizado por grandes proyectos como gnome o kde y se supone que es el más potente, así que por qué no.