[Py-MAD] Mercurial vs git (antes: Reunión python-madrid febrero 2013)

Jesus Cea jcea at jcea.es
Tue Feb 5 15:51:36 CET 2013


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 05/02/13 15:24, Juan Luis Cano wrote:
> Pues a mí eso me parece una limitación bastante seria. Yo estoy
> muy contento de que en Python no haya propiedades ni métodos
> privados verdaderos (se protegen tras una convención de nombres
> pero se pueden acceder), así que siguiendo la filosofía «we are all
> consenting adults here» no veo por qué se ha impuesto que no se
> pueda reescribir la historia.

La filosofía es que NO se pueda modificar la historia. Eso es bueno.
¿Has leído 1984?. El libro o la peli :)

La idea es es que para trabajar NO DEBE SER NECESARIO modificar la
historia de un proyecto porque, coño, es la HISTORIA.

Pero si sigues mi web, igual duermes más tranquilo :-)

http://www.jcea.es/artic/mercurial-ircd.htm
http://www.jcea.es/artic/mercurial-olimpo.htm

Por supuesto, lo que sale ahí son reescrituras completas de
repositorios. Editar un commit aquí y allí, un "rebase" por allá, es
MUCHO más sencillo. Que nadie diga "pero es que reescribir la historia
es MUY difícil". Esto son casos tan patológicos y complejos que han
dado para dos artículos. No son ejemplos de reescrituras "normales".

Pero dejan claro que se puede hacer lo que quieras con el repositorio,
si realmente quieres.

> ¿Porque puede traer problemas?

Hay un repositorio. Yo tengo un clon y tú tienes otro. Ahora tú
manipulas la historia de TU copia. Cuando me bajo tu versión, tengo
dos grafos separados: la historia original (que sigue en mi
repositorio) y la tuya, modificada. Ahora supón que hay 20 personas
modificando la historia. Decir que el resultado me parece confuso es
ser suave.

GIT tiene el mismo problema, claro, pero lo soluciona a nivel
"cultural", abandonando ramas que simplemente desaparecen cuando nadie
más las referencia. Eso supone que esa historia no referenciada, que
era la original, se "pierde" para siempre jamás.

En las versiones recientes de mercurial aparece el concepto de
changesets "obsoletos". Son changesets que se mantienen en la
historia, pero que no se muestran por defecto. Pero siguen ahí. La
historia se preserva. Y es consistente entre todos los clones.

Además del problema técnico, para mí hay un problema filosófico: Un
proyecto NO debe reescribir su historia de forma rutinaria. No debe
ser necesario (salvo "rebase" locales) para trabajar. Pero debe ser
posible si es necesario. Mercurial se atiene a eso.

> Las limitaciones son una forma naïve de protegerte y luego te la
> juegan cuando te la quieres saltar, como bien describiste en tu web
> al migrar los repos de IRC hispano.

Ah, sigues mi web o mis twits :-).

Lo que describo en esos enlaces es cirugía mayor. Como ves, Mercurial
lo permite. Naturalmente, para "reescrituras" "normales", es MUCHO más
sencillo. Y hay múltiples formas: exportando changesets, rebase,
mercurial queues, histedit y un montón más.

La clave no es que no se pueda hacer, la clave es que NO debe hacerse.
No debe formar parte del ciclo de desarrollo del proyecto, rutina.

> Aparte de esto no he manejado ninguno de los dos sistemas en 
> profundidad, y hg mucho menos que git, pero lo que leo siempre
> sobre mercurial es que los branches son poco menos que una broma.

Es una queja habitual, y por eso se añadieron los "bookmarks". En
mercurials modernos, tienes las dos opciones, a elegir. Además de
simplemente clonar el repositorio para desarrollar una feature
concreta, que es lo que suelo hacer yo (clonar en local es "barato" en
velocidad y en espacio en disco).

Insisto, no obstante que hay diferencias culturales, y no me sorprende
que la gente de GIT considere "bromas" hechos fundacionales de
Mercurial que los "nativos" amamos y apreciamos.

A mí que GIT "pierda" commits abandonados (y que por definición se
pueden eliminar, porque no hay referencias a ellos... ahora) me da
escalofríos no porque sea peligroso o malo (no lo es), sino porque
supone pérdida de historia del proyecto.

Reescribir la historia es "normal" en GIT, y una aberración a evitar
(pero posible) en Mercurial. Como digo, diferencias culturales y
filosóficas, y ya he dicho qué prefiero yo.

- -- 
Jesús Cea Avión                         _/_/      _/_/_/        _/_/_/
jcea at jcea.es - http://www.jcea.es/     _/_/    _/_/  _/_/    _/_/  _/_/
jabber / xmpp:jcea at jabber.org         _/_/    _/_/          _/_/_/_/_/
.                              _/_/  _/_/    _/_/          _/_/  _/_/
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQCVAwUBUREceJlgi5GaxT1NAQLt5gP+Is8gtyaQpnoCdwSGoKhsEcJ7j/i17TYp
46SeRnp4WeR6GLgILRcTp55bKGP5TidRILj1PnZAOAAo+JXufCnBPOSZnI/3TUJa
K8QDshutkD1JtlCkJ7Yh7gaqokJW7mq4n27M4Ri6m7SpJdkqf8IQyeLpqijei91F
kvQ2mgDOx8E=
=m9fb
-----END PGP SIGNATURE-----


More information about the Madrid mailing list