2010-11-18 21 views
6

Duplicar posible:
Merging: hg/git vs. svn¿Qué hace que Git sea mejor que Subversion para fusionarse?

He oído/leído que Git DVCS y de en general son mejores que Subversion y sistemas de control de versiones centralizados. Y una de las razones por las que he escuchado esto es que la fusión es mucho mejor en DVCS que en un sistema centralizado.

¿Cuál es la diferencia entre los dos cuando se trata de fusionar? ¿Qué hace que Git sea mejor que Subversion cuando estás reintegrando una sucursal, por ejemplo?

+0

Creo que gran parte del "debate de la fusión SVN" proviene de los aficionados DVCS. La fusión es una de las cosas que SVN mejoró mucho con CVS, pero la mala reputación de CVS (merecidamente) podría reflejarse en SVN. En nuestro equipo nos fusionamos mucho en SVN, y no sé de problemas. – sbi

+2

Muy relacionado: http://stackoverflow.com/questions/2613525/what-makes-merging-in-dvcs-easy – kolobos

Respuesta

5

No es tanto el hecho de que se distribuyan, sino más bien que hacen un seguimiento de conjuntos de cambios en lugar de versiones. (Sin embargo, los sistemas distribuidos generalmente funcionan con conjuntos de cambios, mientras que los sistemas centralizados a menudo usan versiones, porque los sistemas distribuidos simplemente no funcionan con un enfoque basado en versiones, mientras que los sistemas centralizados pueden salirse con la suya).

Subversion dice, OK, primero tuve esta versión y luego tuve esa versión. Y luego, cuando es momento de fusionarse, toma las dos versiones, las compara y hace conjeturas sobre cómo combinarlas. Git, mercurial, y SCM similares, digamos, OK, primero no tenía nada, luego alguien hizo este cambio y luego alguien más hizo ese cambio, etc. Cuando se trata del momento de la fusión, básicamente todo lo que tienen que hacer es aplicar los cambios en el correcto orden, corrigiendo los números de línea aquí y allá y teniendo en cuenta el cambio de nombre de archivo, pero eso es básicamente eso.

Subversion realmente no tiene suficiente información para realizar una fusión inteligente: solo ve las diferencias, pero no de dónde vienen.

+4

¿No pudo Subversion atravesar las revisiones para encontrar la misma información? –

+2

@Lasse: por supuesto que sí. ¿Cuál es la diferencia entre 'r1' y' r2' sino los cambios entre 'r1' y' r2'? Esa discusión realmente se me escapa. – sbi

+3

Bueno, si Subversion solo mira el archivo original, y luego el resultado final, habrá perdido todos los pasos intermedios, donde DVCS al menos usa esos pasos para hacer la fusión. Pero mi pregunta es por qué Subversion no pudo analizar las revisiones intermedias para encontrar esos pasos. Todavía estoy buscando una buena explicación acerca de dónde viene la magia en la fusión de DVCS. –

3

Linus torvalds hizo una charla en git, available on youtube y vale la pena verla. En él, descarta todas las soluciones de control de fuente, pero git, y luego explica por qué git es genial.

Personalmente, me pareció frustrante llegar a un acuerdo y utilizo SVN profesionalmente todos los días. Creo que svn es lo suficientemente rápido y se ramifica & fusionándose lo suficientemente bien para mis necesidades.

¡Pero no soy un experto en control de fuentes!

+2

Bueno, él explica que git * es * genial, pero no tanto como * cómo * git se las arregla para ser estupendo. Por ejemplo, dice que git rastrea todo el proyecto en lugar de archivos individuales. Sin embargo, experimentos simples con mover texto a archivos diferentes en paralelo con alguien que lo cambia aún me da conflictos de fusión. –

Cuestiones relacionadas