Buenas
mis habilidades como orador han disminuido debido a la excesiva presión que acarrea la responsabilidad de la paternidad, es por esto que después de explicar un par de veces las capacidades de Branching que vienen incorporadas en Team Foundation Server, lo mejor que puedo hacer es remitir un ejemplo para explicar como funciona el mismo.
Supongamos que para la gestión de un producto trabajamos con 2 equipos de desarrollo, DevTeamA y DevTeamB. Donde el equipo A se encarga de los nuevos desarrollos y el equipo B del mantenimiento. La siguiente imagen, nos mostraría el ciclo de vida de un producto desde su versión 1.0 hasta su versión 1.1.
Los pasos que muestra la figura son los siguientes
- El equipo A termina exitosamente la versión 1.0 de un producto.
- A partir de ese momento se inicia
- el desarrollo de nuevas funcionalidades para la versión 1.1
- el mantenimiento de la versión 1.0 por el equipo B
- Cuando se han finalizado ambas tareas se realiza un merge de las versiones 1.0 y 1.1
- Finalmente se puede desplegar la versión 1.1 con las nuevas funcionalidades y con las tareas de mantenimiento realizadas sobre la versión 1.0.
Calculator Service Lifecycle
Como siempre, un ejemplo directo suele ser la mejor opción, asi que veremos más en detalle el ejemplo anterior.
Supongamos que para la versión 1.0 tenemos como target el desarrollo de un servicio muy simple CalculatorService, que sólo consta de 2 funciones que permiten sumar y restar. Nuestro equipo A, ha terminado el mismo, con el siguiente código
1 Imports System
2 Imports System.ServiceModel
3 Imports System.Runtime.Serialization
4
5 Public Class Calculator
6 Implements IServiceCalculator
7
8 Public Function add(ByVal x As Integer, ByVal y As Integer) As Integer Implements IServiceCalculator.add
9 Return x + y
10 End Function
11
12 Public Function subtract(ByVal x As Integer, ByVal y As Integer) As Integer Implements IServiceCalculator.subtract
13 Return x - x
14 End Function
15
16 End Class
Creación de un Branch
A continuación se dedica a crear un Branch para poder gestionar el mantenimiento del mismo. Para esto, sobre el Source Control Explorer selecciona el folder donde se creará el branch y selecciona la opcion Branch.
El asistente para la creación de Branchs se inicia y lo primero que debemos especificar es el nombre del Branch (CalculatorService-branch en este caso) y además deberemos especificar sobre que versión queremos que se genere el Branch.
Una vez finalizado el proceso de creación de un branch, en el Source Control Explorer podremos ver que tenemos un nuevo folder con el nombre que hemos definido para nuestro branch y que esta relacionado con el folder original de código sobre el que hemos generado el branch.
New Features and Maintenance
Aquellos que hayan leido un poco el código verán que la funcion subtract tiene un error, es por eso que el equipo B, encargado del mantenimiento tiene trabajo
- Solucionar el problema de la resta
Pero por otro lado, el equipo A tiene un nuevo requerimiento
- Agregar una nueva función que permita dividir
Cada equipo trabaja sobre un folder diferente en el Source Control de Team Foundation Server y por ejemplo, podremos ver que el equipo A agrega una nueva funcion llamada divide pero sin solucionar el problema de la resta (cabrones)
new features
1 Imports System
2 Imports System.ServiceModel
3 Imports System.Runtime.Serialization
4
5 Public Class Calculator
6 Implements IServiceCalculator
7
8 Public Function add(ByVal x As Integer, ByVal y As Integer) As Integer Implements IServiceCalculator.add
9 Return x + y
10 End Function
11
12 Public Function subtract(ByVal x As Integer, ByVal y As Integer) As Integer Implements IServiceCalculator.subtract
13 Return x - x
14 End Function
15
16 Public Function divide(ByVal x As Integer, ByVal y As Integer) As Double Implements IServiceCalculator.divide
17 Return x / y
18 End Function
19
20 End Class
y por otra parte el equipo B, se encarga de solucionar el problema de la resta
maintenance
1 Imports System
2 Imports System.ServiceModel
3 Imports System.Runtime.Serialization
4
5 Public Class Calculator
6 Implements IServiceCalculator
7
8 Public Function add(ByVal x As Integer, ByVal y As Integer) As Integer Implements IServiceCalculator.add
9 Return x + y
10 End Function
11
12 Public Function subtract(ByVal x As Integer, ByVal y As Integer) As Integer Implements IServiceCalculator.subtract
13 Return x - y
14 End Function
15
16 End Class
Merge de un Branch
Cuando ambos equipos dan por finalizada sus tareas, comienza uno de los procesos mas delicados: el Merge. Aqui hago un pequeño paréntesis y quiero aclarar que el proceso del merge no es trivial. Visual Studio Team System posee un asistente que por lo general soluciona el 95% de los casos de merge automáticamente, pero siempre es conveniente revisar el resultado final para que realmente sea el que esperamos.
Para realizar un merge seleccionamos el folder que se creó con el proceso de Merge inicial y sobre el mismo, desplegamos el menú contextual y seleccionamos la opción Merge
A continuación veremos el asistente para el proceso de Merge que nos solicitará información relacionada con el Source Branch o el folder de origen; y el Target Branch o el folder de destino, que es a donde queremos aplicar nuestros cambios.
Luego de un par de OKs, cuando comienza el asistente, podremos ver que como ambos equipos han trabajado sobre un mismo archivo, en el mismo tenemos conflictos.
Como nuestro ejemplo es muy simple, la opción Merge changes for me, nos solucionará todos los problemas.
Podremos ver en este momento que nuestro archivo Calculator ha pasado por un proceso de Branch
y que dentro del mismo, se han aplicado correctamente los cambios después del merge
1 Imports System
2 Imports System.ServiceModel
3 Imports System.Runtime.Serialization
4
5 Public Class Calculator
6 Implements IServiceCalculator
7
8 Public Function add(ByVal x As Integer, ByVal y As Integer) As Integer Implements IServiceCalculator.add
9 Return x + y
10 End Function
11
12 Public Function subtract(ByVal x As Integer, ByVal y As Integer) As Integer Implements IServiceCalculator.subtract
13 Return x - y
14 End Function
15
16 Public Function divide(ByVal x As Integer, ByVal y As Integer) As Double Implements IServiceCalculator.divide
17 Return x / y
18 End Function
19
20 End Class
Conclusión
Las capacidades de Branching de Visual Studio son muy poderosas y muy superiores a las que ya poseiamos en VSS. Bien utilizadas pueden afectar notablemente a la metodología con la que se desee trabajar y permiten aislar equipos de trabajo relacionados a tareas específicas de una manera muy simple. Si alguien quiere mas información no deje de leer http://msdn2.microsoft.com/en-us/library/ms364074(VS.80).aspx#vs05teamsys_topic7
Saludos
El Bruno
Crossposting from
ElBruno.com