Porque me gusta GIT

2009
02.16

Hace unos días Dieguito (aka DLL) me dijo que los manejadores de versiones distribuidos (dcvs, según sus siglas en inglés) no lo convencían y me preguntó porqué me gusta GIT.
Empecemos respondiendo cuales a mi manera de ver son las ventajas de un dcvs. La principal ventaja dada su naturaleza distribuida es que no hay un servidor central al cual conectarse para obtener y/o publicar cambios realizados a un proyecto, aunque nadie impide que los encargados de un proyecto definan a un repositorio como el central, en otras palabras esto permite que cada proyecto utilice el workflow que mejor le parezca. Por ejemplo la gente del kernel del linux utiliza un mecanismo estratificado donde Linus Torvals recibe updates de los desarrolladores en los que confía y a su vez estos hacen los mismo un nivel más abajo, creando así una estructura jerárquica. Como son distribuidos son menos propensos a fallas y o perdidas en el caso de que el servidor central falle total o parcialmente, ya que podremos usar cualquier otra instancia mientras que la falla persista. También permite que un grupo de desarrolladores trabajen en conjunto mandándose modificaciones unos a otros sin necesidad de polucionar el servidor con sus cambios. Hasta acá parece que sólo tiene ventajas para el grupo desarrollo, pero también es interesante que uno localmente puede crear sus propios ramas para experimentar cambios “locos” y/o “raros” sin necesidad de duplicar el checkout local, esto es posible ya que el checkout local tiene las mismas funcionalidades que el “repositorio central”.

Ahora volvamos a lo que me gusta de GIT que como no podía ser de otro manera son dos cosas. La primera es que no GIT no mantiene un historia lineal de cada archivo en el repositorio sino mantiene un historia de cambios hechos al repositorio, lo que permite que GIT sea capaz de detectar y mostrar como partes del código fue migrando de un archivo a otro, y creo que esta funcionalidad no existe en casi ningún otro dcvs. La segunda funcionalidad que me parece excelente es el comando stash, que basicamente lo que hace es guardar temporalmente todos los cambios, commiteados o no, en algún lugar para que podamos movernos a otra rama sin tener que copiar nuestros cambios o hacer multiples checkouts para trabajar simultaneamente en diferentes ramas de la misma aplicación.

2 Responses to “Porque me gusta GIT”

  1. dll dice:

    A mí me gustan los DCVS (que cool que queda hablar con estas siglas), creo que solucionan varios problemas. Tengo dos críticas puntuales a GIT. Primero, no es fácil empezar a usarlo, la documentación no es muy buena y los man tampoco. Y ademas… está escrito en su grandísima mayoría en perl… que si bien esto tendría que ser anecdótico para mí no lo es tanto, respeto profundamente a perl como lenguaje y a todos sus (sexagenarios?) seguidores, sin embargo cuando intentar hackear una aplicación implica meterse en el mundo oscuro que supone leer código perl esto genera una comunidad demasiado cerrada que a la larga atenta contra el desarrollo de la aplicación misma (más allá que esta goce de la bendición del cara de papa de Linus).

    Por suerte hay gente que escribe mejor que yo y arma unas flamewars fantásticas:

    http://www.netsplit.com/2009/02/17/git-sucks/

    http://www.netsplit.com/2009/02/17/git-sucks-2/

    http://www.netsplit.com/2009/02/17/git-sucks-3/

    El que he usado con alguna regularidad es Mercurial… tampoco goza de la mejor documentación pero apunta a lo mismo, tiene algunas ventajas sobre GIT y fundamentalmente está escrito en python :) . Acá está el manual traducido al castellano.

    http://devnull.li/libromercurial/index.es.html

    Abrazo Baun, mejoraos de la pata.

  2. bauna dice:

    Es cierto que originalmente GIT eran un montón de scripts pero eso es historia, ya que actualmente GIT esta implementado en C y probablemente quede algún que otro script en perl. Y con la doc es como siempre cuando más gente lo use más info habrá por la net. Pero lo que me sigue genial es dejar de manejar la historia de un repositorio de a un archivo por vez, y ese es el aporte de GIT a los DCVS.
    Si queres buenas intros a GIT:
    http://www.kernel.org/pub/software/scm/git/docs/everyday.html
    http://www.spheredev.org/wiki/Git_for_the_lazy

Your Reply