tag git tfs git-tfs tfs2013

git checkout tag



Sincronizar TFS y GIT (2)

El principal cambio desde que se hizo esa pregunta (en el cuarto trimestre de 2013) es que TFS 2015/2017 ahora tiene un soporte oficial para los repositorios Git. Ver " Git y TFS ".

Entonces, un enfoque razonable sería:

  • use una herramienta como git-tfs para exportar el historial del proyecto TFS existente a un nuevo repositorio Git.
  • divida el repositorio de Git en una base de código principal y varios repositorios más pequeños, cada uno representando la parte a la que desea que otros contribuyentes accedan
  • referencia esos sub-repos como submódulos en la base de código principal
  • finalmente, cree proyectos TFS (esta vez utilizando repositorios Git) para hacer retroceder esos repos en el servidor TFS.

Eso lo dejará con una colección de proyectos TFS, cada uno puede abrirse a un equipo en particular, asegurando que solo las partes específicas sean visibles / accesibles para otros colaboradores.

Y en cualquier momento; Desde el repositorio de coderepo principal, puede actualizar esos submódulos con :

git submodule update --recursive --remote --rebase

(y luego pruebe, agregue, confirme y presione: su repositorio principal de Git hará referencia a los últimos desarrollos de esos submódulos)

Además, considerando la l--''''''''''''---------'''''''''''''''''''''''' , eso ayudaría con un solo repositorio con demasiados archivos.
Aunque, para eso, habrá pronto (ish) GVFS .

El enfoque alternativo mencionado por l--''''''''''''---------'''''''''''''''''''''''' es:

Personalmente quiero poder usar GIT para mis propios cambios, tendría múltiples conjuntos de cambios en GIT, luego los fusionaría en uno, y luego convertiría ese conjunto de cambios en un conjunto de cambios TFS tradicional y verificaría que, de esa manera, simplemente tengo 1 check-in por artículo TFS

Eso es posible, siempre que no te importe perder el historial de confirmación de Git intermedio, cuando los agregues en un conjunto de cambios TFS.

Hoy tenemos todo nuestro código fuente en nuestro servidor TFS local. Ahora queremos que algunas partes externas puedan acceder a una parte del código. Por lo tanto, observamos la posibilidad de que, por ejemplo, Clone este código en un servidor GIT externo al que puedan acceder.

He mirado los git-tfs . Pero si entiendo correctamente, tienes que sincronizar manualmente GIT y TFS cuando ocurra, los cambios en cualquiera de ellos. ¿Hay una manera de tener un clon del código que se sincroniza automáticamente.

Si hay cambios en TFS, se sincroniza automáticamente con GIT, y viceversa. No debería haber incertidumbre si trabajo con el código más actual


No hay forma de sincronizar 2 repositorios que se desarrollen separadamente 100% de forma automática con la solución que elija (para lograr la sincronización automática, debe lograr una sincronización inmediata o ser capaz de bloquear la inserción de git o registrar en TFVC cuando uno de los 2 equipos comienzan una sincronización).

Por lo tanto, siempre tendrás conflictos que deberías combinar manualmente. Podría encontrar un flujo de trabajo que evitará la mayoría de ellos, pero nunca resolverá todos los casos y estos casos restantes serán realmente difíciles de resolver ...

De todos modos, casi podrías lograr lo que quieres (depende de tus expectativas: ¿necesitas soporte de ramificación --hard -, ...) con git-tfs (he incluido en git-tfs todo lo necesario para hacer eso pero nunca utilizado en producción) pero es un poco complicado.

Debe clonar su repositorio de TFS en un repositorio simple:

git tfs clone https://server/tfs/TeamCollection $/project/trunk --bare --with-branches

entonces necesitas escribir en tu post-receive de este repositorio simple algo así (no recuerdo si funciona):

branch=$(git rev-parse --symbolic --abbrev-ref $1) if [ "master" == "$branch" ]; then branch="default" fi git tfs rcheckin --bare -i $branch

Con eso, cada vez que alguien presione en el repositorio de git, las confirmaciones se registrarán en TFS.

Para mayor comodidad (de lo contrario, siempre tendrán conflictos aburridos que resolver cuando intenten presionar), puede sincronizar el repositorio git con el servidor TFS con una tarea programada con el comando (de esta manera, estarán al tanto de las nuevas confirmaciones antes):

git tfs fetch --all

Nota: No recuerdo si este comando podría usarse en un repositorio simple (ahora que lo pienso, no lo creo). De lo contrario, deberá utilizar git tfs fetch -b=myGitBranch -i tfsRemote para cada rama existente :(

Pero estoy seguro de que nunca podrán trabajar con sucursales que no se crearon en tfs :( La herramienta git-tfs no puede crear automáticamente una sucursal de TFVC a partir de un historial de git. Técnicamente, eso es factible, creo , pero nunca desarrollado (porque git-tfs es más una herramienta para ejecutar TFVC que una herramienta para verificar su desarrollo en él ...)

Y algunas otras cosas podrían ser difíciles o imposibles de hacer ...

Espero que te ayude.

PS:

  • ese es un trabajo difícil que estás tratando de hacer por alguien que no está acostumbrado a git-tfs ... y algo que no recomiendo hacer.
  • Recomiendo ir de la misma manera que Microsoft está tomando y migrar todo en git (incluso permanecer en el servidor TFS o VSTS si es necesario), así la sincronización será mucho más fácil (incluso si no es 100% automática ;-)). He hecho un buen documento sobre cómo migrar desde TFVC: https://github.com/git-tfs/git-tfs/blob/master/doc/usecases/migrate_tfs_to_git.md
  • Intente convencer a su empresa de que cada equipo debe elegir y dominar sus herramientas y no se le deben imponer algunas opciones.