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 ...