2009-01-08 7 views
5

esto puede ser una pregunta ingenua, pero, como se pregunta en el objeto, ¿cuál es la forma real utilizada por las versiones de software para fusionar una rama de nuevo en el tronco principal sin generar código roto?¿Cómo funciona realmente la fusión de una rama (debajo del capó)?

Aquí hay un ejemplo rápido: hago una ramificación del tronco principal para el programa "Hello World Power edition". Agrego soporte para Klingon. Este es un cambio radical que cambia la forma en que funciona la función printHelloWorld().

Mientras tanto, debido al error # 749 que causa que "Hello World" se escriba "Helo World", se ha cambiado la función printHelloWorld() en el tronco principal.

Ahora, el problema que veo aquí es: ¿Cuándo puedo combinar por rama de nuevo al tronco principal experimento un choque en el printHelloWorld función() dentro del archivo sayHello.py

¿Cómo sabe un programa de VCS cómo agregar el soporte Klingon de mi sucursal y mantener la corrección de errores en el tronco principal? ¿Cuáles son las estrategias impulsadas por el ser humano o impulsadas por software para evitar esto?

Gracias de antemano.

Respuesta

3

¿Cómo un programa de VCS sabe cómo añadir el apoyo Klingon de mi rama y mantener la corrección de errores en el tronco principal?

VCS no sabe nada acerca de la semántica de su código fuente, lo ve como un conjunto de archivos de texto/binarios. El sistema VCS usa los algoritmos diff/merge para detectar conflictos entre el suyo y la versión actual del archivo. Es su responsabilidad resolver dichos conflictos porque solo usted conoce la semántica de estos cambios. Algunos VCS como SVN requieren que actualice su copia de trabajo con los cambios más recientes desde el enlace antes de permitirle realizar cambios para asegurarse de que no se pierda nada.

Para asegurarse de que no se rompió nada y no se rompieron todas las correcciones de errores anteriores, debe usar code reviews, unit tests y otras prácticas. Continuous integration es una buena manera de mantener el software saludable.

0

En tal caso, el sistema de control de versiones no puede fusionarse automáticamente, tiene que hacer la fusión a mano. Las buenas pruebas unitarias lo ayudarán a asegurarse de que no se pierda ninguna funcionalidad.

0

Antes de que pueda fusionar su bifurcación en la troncal, el sistema de control de versiones actualizará su copia de trabajo con los cambios en la troncal desde que se bifurcó. Simplemente no te permitirá fusionarte sin esta actualización. Esto asegura que obtendrá todas las correcciones de errores en el tronco en su próxima confirmación.

Una buena estrategia para trabajar en una sucursal es realizar cambios de puerto en el baúl en su sucursal de forma muy regular. Esto garantiza que no se aleje demasiado del tronco, lo que le ocasionará problemas cuando finalmente se vuelva a unir al tronco.

+0

Oh, bien, pero ** ¿cómo? **. "Actualizar mi copia de trabajo" puede conducir al mismo problema ... en sentido inverso. O, presionando printHelloWorld() agregaría la corrección a la rama a expensas del soporte para el lenguaje klingon. – pistacchio

Cuestiones relacionadas