tag remove crear git tfs git-branch git-tfs

remove - ¿Cómo uso git-tfs y la ramificación git idiomática contra un repositorio TFS?



git push tag (3)

¿Qué hay de múltiples tfs-repos remotos, 1 por rama? tengo la siguiente estructura:

$/Root/Main/someproject (the trunk) $/Root/Releases/Branch1/someproject $/Root/Releases/Branch2/someproject

lo que hice

git tfs quick-clone http://tfs:8080/tfs/defaultcollection $/Root/Trunk GitRepo git tfs quick-clone http://tfs:8080/tfs/defaultcollection $/Root/Releases/Branch1 GitRepo -i branch1 git tfs quick-clone http://tfs:8080/tfs/defaultcollection $/Root/Releases/Branch2 GitRepo -i branch2

luego puedes crear una rama para cada rama remota: git checkout -b localbranch1 tfs/Branch1 y commit en la rama git tfs ct -i branch1

Para poder fusionar fácilmente las dos líneas crea un injerto:

echo branch-commit-id trunk-parent-id > .git/infos/grafts

donde los ids son el hash de la primera confirmación de la sucursal (del repositorio de lanzamientos) y una identificación de la confirmación principal (buscar manualmente)

PD: obtengo un error: el directorio del repositorio de git especificado tampoco está vacío (no sé cómo funcionó antes), así que agregué manualmente la segunda url en .git / config e hice git tfs fetch -i Branch1

¿Cómo uso git-tfs idiomáticamente?

  • La expresión idiota es verificar las ramas en el directorio raíz del repositorio. El control de una rama reemplazará el contenido del directorio con el contenido de esa rama.

  • La expresión TFS es verificar cada rama en un directorio diferente en el directorio raíz del repositorio (incluso la rama maestra o troncal). Verificando una sucursal la colocará en un nuevo directorio al lado de la actual.

Usando git-tfs , puedo clonar un repositorio TFS o una rama en un repositorio git. Quiero trabajar en un repositorio TFS con múltiples ramas de una manera consistente con la expresión idiomática de git . Pero no estoy seguro de qué es técnicamente posible o recomendable :)

Clona todo el repositorio de TFS

Si clono todo el repositorio fuera de TFS

> git tfs clone http://<tfsurl>:8080 $/main

Eso me daría un master git que contiene todas las ramas de TFS como directorios.

[master]> dir trunk feature-logon feature-search release-0.0.1

Agregar un control remoto por rama de TFS

No sé si puedo (o cómo) asignar un git remoto a cada rama de TFS.

> git init . [master]> git tfs clone http://<url> $/main/trunk .

Entonces

[master]> git checkout -b feature-logon [feature-logon]> git tfs clone http://<url> $/main/feature-logon .

Sé que esto es técnicamente incorrecto, pero no sé nada mejor sin jugar (mi único repositorio de TFS es muy grande, la experimentación lleva mucho tiempo)


Ahora es posible hacer que las ramas TFS sean ramas correctas de Git si se clona usando git-tfs . ¡Esto está ahora en la versión estable! Primero clona no todo el repositorio sino el tronco:

git tfs clone http://<tfsurl>:8080 $/main/trunk

Luego ejecutas la branch --init , que crea una nueva rama en el repositorio de Git

git tfs branch --init $/MyProject/MyTFSBranch

en tu caso :

git tfs branch --init $/main/feature-logon

O utilice el --all en un repositorio clonado nuevo para crear TODAS las ramas presentes en el servidor TFS.

git tfs branch --init --all

También puedes clonar directamente con todas las ramas usando flag --with-branches :

git tfs clone http://<tfsurl>:8080 $/main/trunk --with-branches

La documentación para este nuevo comando está here . Siéntase libre de proporcionar comentarios para mejorarlo ...


Esta es una manera de hacerlo, y aún así mantener algunas relaciones entre el maestro y las ramas. Probablemente quieras guionarlo. Disculpe si uso declaraciones de bash en lugar de línea de comandos de Windows para algunos de mis ejemplos

Primero clone todo el repositorio, como en su primer ejemplo, con ramas como directorios.

Esto mueve el tronco a la raíz. (con suerte no hay conflictos con sus carpetas de sucursales)

mv trunk/*.* .

Confirma tu nuevo maestro

git commit -a -m "refactoring master"

creando una nueva rama

git checkout -b feature-login

Copie los archivos de rama sobre los archivos raíz

mv feature-login/*.* .

No los necesito aquí por más tiempo

rm -rf [all_branch_directories]

Comprometerse con la rama

git commit -a -m "refactoring feature-login"

volver a dominar

git checkout master

Hazlo todo de nuevo

git checkout -b next_branch

etcétera etcétera..

Finalmente al final

git checkout master rm -rf [all_branch_directories] git commit -a -m "refactoring master"

No es perfecto, pero terminas con todas tus ramas clonadas de forma maestra y difuminadas más o menos apropiadamente. AFAIK git debería estar bien si sobrescribe un archivo con otro archivo pero el contenido no cambia, lo que permite que todo funcione.

Una desventaja es que no eliminará ningún archivo en las ramas que se han eliminado del tronco. Esto puede o no ser un problema para ti ...