¿Cómo funcionan los DVCS (DRCS)?

He escuchado muchas cosas buenas sobre los sistemas DVCS, en particular sobre el bazar. Además del concepto de repository distribuido, veo que se promocionan dos ventajas principales: la combinación está mejor automatizada y el cambio de nombre se maneja correctamente.

¿Podría alguien señalarme un text que explique cómo funcionan exactamente las mejoras? ¿Cómo sabe bazar que he cambiado el nombre de un file? ¿Qué sucede si cambio el nombre de dos files como parte de la misma confirmación? ¿Qué sucede cuando refactorizo ​​colocando la mitad del contenido del file en un nuevo file, volviendo a indentificar todo y perdiendo espacio en blanco en casi todas las líneas?

En otras palabras, me gustaría saber de personas que usan bazar (u otro DVCS) en la vida real, o de personas que saben cómo funcionan. ¿La fusión realmente es mucho mejor? ¿Y cómo se logra?


Pregunta relacionada, con una respuesta útil:

¿Por qué las ramificaciones y las fusiones son más fáciles en Mercurial que en Subversion?

Merge no es intrínsecamente mejor en DVCS, es solo que sería prácticamente muy difícil de usar si la bifurcación / fusión no funcionó correctamente (svn podría decirse que no implementa la bifurcación / fusión correctamente), porque en lugar de hacer un checkout, estás hacer una nueva sucursal cada vez que comienzas a trabajar en un proyecto desde un código existente. Creo que algunos SCS propietarios y centralizados manejan correctamente la fusión / ramificación.

La forma en que funciona para todos ellos es registrar cada compromiso en un gráfico directamente acíclico (DAG), y a partir de esto, tiene diferentes estrategias de fusión disponibles. Aquí puedes encontrar más información:

http://revctrl.org/CategoryMergeAlgorithm

Al less hg, bzr y git pueden usar utilidades de combinación externas.

DVCS logra mejores fusiones mediante el seguimiento de las revisiones principales de las fusiones. En Subversion, cuando fusiona una twig en otra, pierde información acerca de dónde se originó la fusión. En DVCS como Bazaar o Git, la revisión "fusionada" termina con dos revisiones principales.

El cambio de nombre se maneja de forma diferente entre los DVCS. Git, por ejemplo, no sigue el cambio de nombre porque no era importante para Linus. Mercurial los registra como "copyr file antiguo a nuevo, eliminar antiguo". Según Mark Shuttleworth , fundador de Canonical, Darcs y Bazaar son los únicos DVCS que manejan el cambio de nombre de file correctamente.

¿Cómo sabe bazar que he cambiado el nombre de un file?

El usuario especifica los cambios de nombre, al igual que agregar o eliminar files. Utilice el command " bzr rename <old> <new> " para marcar los files o directorys para cambiar el nombre. Si ya ha renombrado un file en el tree, puede usar la opción " --after ".

¿Qué sucede si cambio el nombre de dos files como parte de la misma confirmación?

Luego escribe " bzr rename <old> <new> " una vez para cada file. Bazaar no intenta adivinar qué files se han renombrado.

¿Qué sucede cuando refactorizo ​​colocando la mitad del contenido del file en un nuevo file, volviendo a indentificar todo y perdiendo espacio en blanco en casi todas las líneas?

Luego, escribe " bzr add " en el nuevo file, ya que en realidad no lo está renombrando.

La siguiente es una discusión de cómo darcs ( http://darcs.net ) trata sobre parches – http://darcs.net/manual/node9.html .

No estoy familiarizado con bazar, pero git no rastrea los nombres de los files. Para git, esto parece una eliminación y un complemento. Sin embargo, git es lo suficientemente inteligente como para ver que el contenido del file ya existe en su repository y rastreará su position en el sistema. Si divide los files o los combina, es lo suficientemente inteligente como para realizar un seguimiento de los segmentos de código (blobs) y almacenar esa información también.