No había entendido la necesidad de usar el control de versiones distribuido. Con este
artículo entendí bastante mejor en qué casos parece necesario. De todos modos se necesita experiencia en el manejo de control de versiones, ya que un repositorio centralizado es una necesidad para mantener una versión coherente. Si de agilizar la comunicación entre los puntos de desarrollo se trata, un control de versiones descentralizado parece una buena opción. Además, por el mismo mecanismo de descentralización, se gana en hacer más simple las sincronizaciones con el repositorio central.
La palabra distribuido como dice el artículo puede llevar a una mala interpretación. En realidad no se trata de computación distribuída sino de repositorios distribuidos. Además se trata de repositorios débilmente conectados y desacoplados.
Comentarios
Es es aplicable a un dvcs, se tiene un repositorio central "oficial" y luego los demás. En un control de versiones como subversión, de igual manera manejan "varios repositorios" en forma de ramas: rama de desarrollo principal, rama del desarrollador X, rama para funcionalidad Y, etc.
Pero el problema con subversión es depender del servidor central para las operaciones, no poder hacer operaciones off-line y otras limitantes. Entonces uno tiene que mandar un commit con un montón de cambios perdiendo la atomicidad en los cambios.
Al menos en mercurial, lo que conozco, por más que haya mil ramas todas tienen un punto común (o varios), de ahí es donde todas las ramas estan conectadas y el merge entre ramas no es más complicado que el merge entre ramas en subversión.
#2, al menos en mercurial, realiza el merge hasta donde puede, de igual manera que usar diff/patch.
Si hay incompatibilidad en algún changeset, entonces lanza el programa para hacer merges, en mi caso utilizo meld, que compara lado a lado las tres versiones: la original (mia), el merge con conflictos, y el remoto.
Así con meld -herramienta gráfica- es "papita pa'l loro" manejar los merges con conflictos. Lo uso mucho, por ejemplo, al tener una versión local, con modificaciones y todo, y luego querer actualizar a la útlima versión "oficial" sin perder mis cambios.
Más o menos si, puedes ver un sshot de meld: http://meld.sourceforge.net/meld_file1.png
Las flechas sirven para pasar una linea de un lado a otro sobreescribiendo la correspondiente, tambien puede eliminar esos bloques usando shift. El conflicto sólo sale cuando diferentes cambios en la misma línea, pero si son líneas nuevas y no coincidieran en la posición... simplemente recorre un poco y aplica el cambio, pero es propiedad de patch más que el vcs.
Seguro que hay algo similar para win.