[eside-ghost] Otra de control de versiones
Yuki (aka Rubén Gómez)
rugoli en gmail.com
Vie Feb 25 21:02:07 CET 2011
2011/2/25 Jon Valdés <juanval en gmail.com>:
> Ahora tengo que hacer cambios bastante serios porque ha cambiado una
> de nuestras librerías internas, y me veo que tengo que hacer los
> mismos cambios exactamente en ambos proyectos (excepto en las partes
> cambiadas, claro). En un principio, la teoría dice que podría extraer
> el changeset de los cambios de uno de los proyectos y aplicarlo
> directamente al otro, pero me da un miedo del 15. ¿Alguien tiene
> experiencia en algo así con mercurial?
En mercurial no, y en git un poco, igual no cambios tan tochos, pero
igual sirve de algo.
Estando en una rama, puedes hacer "git cherry-pick 5d3e1b6", que coge
el diff con sha1 "5d3e1b6" (que puede estar en otra rama) y te lo
aplica en la rama donde estás. Esto no funcionará en dos repositorios
distintos, pero tal como dices, puedes hacer un diff entre la última
versión que hay en el repositorio central tus cambios aplicados, y
aplicar ese diff en el otro repositorio. No se me ocurre otra opción.
Como aplicar ese diff te puede genera muuuchos cambios (en muchos
ficheros, y en distintas partes de un mismo fichero), en git se pueden
ir añadiendo en el "staging area" (no sé si en el resto de repos se
llama así, te pongo una imagen de la zona a la que me refiero, que es
la parte donde se quedan los cambios después de hacer "add" y antes de
hacer un commit:
http://whygitisbetterthanx.com/images/local-remote.png) las partes que
te vas asegurando que son buenos cambios haciendo "git add
--interactive". http://book.git-scm.com/4_interactive_adding.html
De esta manera, te va mostrando zonas de código cambiado que él cree
que son separados. Yo el "git add --interactive" no lo he usado mucho,
y me pareció un poco complicado al principio, pero parece que tiene
mucho potencial.
Para no liarla, todo esto lo puedes hacer en dos clones distintos, y
no hacer push hasta que no estés seguro del todo. Si que te puede
pasar que en el diff te lleves algo de código de ese 20% que no
debería mezclarse, pero ese riesgo existe siempre.
Para comparar los diff que se generan, en git existe "git mergetool",
que es un alias que puedes poner usando vimdiff, o meld (un diff hecho
en gtk) y así ves con ese programa los conflictos y cambios que salen.
Ya contarás cómo solucionas el asunto.
Más información sobre la lista de distribución eside-ghost