tutorial - svn windows
¿Cuál es la diferencia entre SVN y Git para fusionarse? (2)
A eso se le llama fusionarse con el conflicto, y ningún VCS lo resolverá por usted.
Tendrá que resolver manualmente la fusión usted mismo.
Como se mencionó en ¿Por qué fusionarse en git es mejor que SVN , la diferencia real está en el historial de grabación de las confirmaciones:
- lineal para SVN
- DAG (Directed Acyclic Graph) para Git
Eso le permite a Git recordar lo que ya se ha fusionado, reduciendo considerablemente los conflictos.
Por lo tanto, cuando llega el momento de combinar desde 5b a la rama (a), podemos usar la información en el DAG para saber que 3b y 2b ya están listos
Así que es el flujo de trabajo de combinación que Git manejará con más gracia que SVN:
Ver Merge Git vs. SVN para ejemplos concretos.
Como lo sugiere el título, siento curiosidad por saber por qué tanta gente promociona a Git como una alternativa superior a la ramificación / fusión sobre la SVN. Tengo curiosidad principalmente porque la fusión de SVN apesta y me gustaría una solución alternativa.
¿Cómo Git maneja la fusión mejor? ¿Como funciona?
Por ejemplo, en SVN, si tengo la siguiente línea:
Hola Mundo!
Entonces user1 lo cambia a:
¡Hola mundo! 1
entonces user2 lo cambia a:
¡Hola mundo! 12
Entonces user2 se compromete, luego user1 se compromete, SVN le dará un conflicto. ¿Puede Git resolver algo tan simple como esto?
El conflicto específico que mencionas es siempre irresoluble. Simplemente, no hay forma de que una herramienta de combinación sepa qué versión se debe conservar.
Sin embargo, Git es probablemente mejor que SVN para lidiar con conflictos que se pueden resolver. Su estrategia de combinación principal es recursiva, que encuentra el ancestro común de dos confirmaciones que cambian el mismo archivo y realiza una combinación de tres vías. También tiene alguna capacidad incorporada para registrar y reutilizar resoluciones de conflictos ( git-rerere ) y una variedad de otras estrategias de combinación para casos especiales.
La ventaja de Git al fusionarse es que es parte de la historia. Un compromiso de fusión es un compromiso con dos padres. El modelo de historia de Git (un gráfico acíclico dirigido) espera que se cometan cosas como esta. Esto significa que futuras fusiones en el futuro funcionan exactamente como deberían. Siempre. (Sí, a veces hay conflictos, pero son conflictos reales, no una incapacidad para manejar la fusión).
SVN, por otro lado, solo trata de rastrear dónde ocurrieron las fusiones, pero su modelo aún es inherentemente lineal. El historial aún tiene una sola cadena de confirmaciones, con información de seguimiento de combinación que proporciona ayuda adicional. Por lo que he escuchado, SVN no siempre puede manejar patrones de fusión más complejos correctamente. (Un ejemplo es una fusión reflexiva: fusionar A con B y luego B con A.)