visual usuario tutorial team studio proyecto online historias español ejemplo tfs tfs2010 shared-libraries branching-and-merging

usuario - Sucursal de TFS 2010 en proyectos de equipo: mejores prácticas



tfs scrum (4)

Lanzaremos una opción al anillo, puede o no serle útil. Si te sirve de consuelo, he estado meditando sobre este durante un tiempo y no he podido encontrar una solución completamente satisfactoria. Es una muy buena pregunta y estaría muy interesado en ver cómo otros han resuelto este problema.

Sé que se considera una buena idea construir desde la fuente siempre que sea posible, pero no soy partidario de las ramificaciones entre los proyectos de equipo. Si tiene un código común y necesita ser ramificado entre 2 o 3 otros proyectos de equipo, entonces la bifurcación es manejable, pero si tiene 20 o 30 (o 100) proyectos de equipo, entonces administrar las fusiones se convierte en un dolor de cabeza. Puede haber otros problemas si los desarrolladores que trabajan en los proyectos del equipo que consumen no tienen los mismos permisos en el "maestro", como no poder ver el historial, etc. Por supuesto, si tiene un código que debe compartirse entre los proyectos del equipo en diferentes colecciones de proyectos, entonces no se puede ramificar de todos modos.

Entonces, con eso en mente, le sugiero que trate el código común de la misma manera que podría tratar una biblioteca de terceros y usar referencias binarias. Una vez que ingresas a esa mentalidad, tienes varias opciones disponibles. (Aquí hay algunos, pero probablemente haya más)

  1. Puede hacer que la compilación para su código común copie los binarios en una ubicación de colocación, junto con un módulo de combinación para empaquetar (si usa MSI). A continuación, crea una referencia binaria a la ubicación de colocación y obtiene lo que usa para empaquetar para importar el módulo de combinación. En este caso, debe asegurarse de que la ubicación de colocación sea estable (y preferiblemente solo para la mayoría de los desarrolladores para evitar manipulaciones).
  2. Al igual que en la opción 1, pero utiliza una herramienta como NuGet para administrar sus referencias, esto automatizará el proceso de referencia de las nuevas versiones de los binarios. Puede que esta no sea una opción si desea tener más control sobre el lanzamiento de nuevas versiones.
  3. Podrías simplemente verificar los binarios en la carpeta $ / Product1 / branch / lib / common en tu sucursal y hacer referencia a ellos usando una ruta relativa

Como dije, estoy muy interesado en escuchar cómo otros SO han resuelto el problema del código compartido usando TFS.

Tengo problemas para entender cómo configurar TFS de acuerdo con las mejores prácticas según lo provisto por el equipo TFS Ranger. El problema es tal

Mi compañía tiene varios productos que hacen uso de una base de código compartido común.

> $/Core > -> /Main/Source (Parent Branch) > > $/Product1 > -> /Main/Source > -> /Main/Source/Core/Source (Child Branch from $/Core) > -> /Main/Source/... > > $/Product2 > -> /Main/Source > -> /Main/Source/Core/Source (Child Branch from $/Core) > -> /Main/Source/...

Por lo tanto, tenemos una colección de equipo y, por ejemplo, tres proyectos de equipo para este ejemplo. ($ / * es un proyecto de equipo)

Nuestra ramificación de lanzamiento inicial es un poco dolorosa. En lugar de ramificar en / Main a / Releases, o / Main to / Development, hemos estado ramificando cada proyecto individualmente. (No proyecto de equipo ... proyecto de solución.)

Esto se debe a la imposibilidad de tener raíces de ramas anidadas. (Ver errores TFS: TF203028 y TF203071 )

De acuerdo con la Guía de Rangers de TFS y nuestro enfoque revisado para las versiones de bifurcación, revisiones, desarrollos, debemos ramificar desde / Main en lugar de / Main / Source / Proj1, / Proj2, / Proj3, etc. Se ha convertido en una molestia bastante grande.

Idealmente nos gustaría:

> $/Product1 > -> /Main/ (Branch - Parent) > -> /Releases > -> /1.x > /1 Service Pack (Child Branch from $/Product1/Main > -> /1.0 > -> /1.0 Hotfix (Child Branch from $/Product1/Releases/1.x/1 Service Pack) > -> /1.0 RTM (Child Branch from $/Product1/Releases/1.x/1.0/1.0 Hotfix - Read Only) > -> /1.0.22 RTM (Child Branch from $/Product1/Releases/1.x/1.0/1.0 Hotfix - Read Only) > -> /1.5 > -> /1.5 Hotfix (Child Branch from $/Product1/Releases/1.x/1 Service Pack) > -> /1.5 RTM (Child Branch from $/Product1/Releases/1.x/1.5/1.5 Hotfix - Read Only)

Soluciones: 1. Podemos convertir cada rama compartida (es decir, $ / Core) en carpetas comunes. De esta forma, ninguna carpeta en / Main es una raíz de la sucursal. Entonces podemos realizar una fusión sin base de $ / Product1 / Main / Source / Core / Source de vuelta al padre $ / Core / Source.

Alguien tiene alguna experiencia con fusiones sin fundamento. Lo que leí de Microsoft es que son excepciones que no deberían ser un lugar común. MS afirma que si configura sus proyectos correctamente con TFS, nunca necesitaría realizar una combinación sin fundamento.

¿Cómo es esto posible cuando se ramifica en proyectos de equipo?!? Debería ser común en cualquier casa de desarrollo de software tener bibliotecas compartidas entre productos.

Estoy abierto a otras soluciones también.

¡Gracias!


Para lograr lo que desea, primero necesita convertir todas las sucursales en la carpeta raíz y luego podrá convertir la raíz en carpeta.

Nos habíamos quedado atrapados con la fusión bajo una rama diferente y luego fuimos a fusionarnos sin fundamento. Nos llevó algún tiempo descubrir cómo funciona, pero luego tuvimos éxito al fusionarnos entre sucursales y luego crear la relación entre ellas.

tf merge /baseless "D:/TFS2010/Root/ServicePack" "D:/TFS2010/Root/MainLine" /recursive

Una vez que haya realizado la fusión infundada, debe registrar todos los archivos. Aún así, encontrarás que la relación entre las ramas no se crea.

Para esto, haga clic en la rama ServicePack (como mi ejemplo) y luego desde el menú de archivo haga clic en Source Control -> Branching and Merging -> Reparent. Allí tendrá la opción de volver a ser padre. Una vez hecho esto, cada vez que desee fusionarse en estas ramas, podrá hacer una fusión normal entre sucursales.


TFS 2010 Branching Revisited:

Me gustaría ofrecer un modo de confianza para la función de fusión sin fundamento de TFS 2010 como una forma de resolver este problema. Recomiendo encarecidamente recoger el libro de Wrox "Professional Team Foundation Server 2010".

En él, describe este problema en profundidad y, aunque no defiende el uso de fusiones infundadas, arroja luz sobre cómo usarlas en escenarios como este.

Los hemos estado utilizando desde que esta pregunta se resolvió por primera vez en abril y aún nos enfrentamos a una situación en la que la fusión sin fundamento presenta un problema. Quería publicar una imagen que detalle nuestra configuración de bifurcaciones según lo recomendado por el libro y el equipo ALM Ranger.


He estado configurando TFS justo ahora y me encontré con el mismo problema. El punto es que no hay necesidad en fusión sin fundamento. Solución:

  1. Crear una rama padre

    $ / Core / Main

  2. Crear una rama hija

    $ / Producto1
    -> / Principal
    -> / Main / Core
    -> / Main / ...

  3. Eliminar carpeta de rama secundaria

    $ / Producto1 / Principal / Core

  4. Crear carpeta con el MISMO nombre

    $ / Producto1 / Principal / Core

  5. Convertir la carpeta Product1 a branch

    $ / Producto1 / Principal

Ahora puede combinar cambios de $ / Core / Main a $ / Product1 / Main / Core y hacia atrás.
La visualización no funcionará para la rama Core, pero está bien, supongo;)