Le git idiom consiste à extraire les twigs dans le répertoire racine du référentiel. Extraire une twig remplacera le contenu du répertoire par le contenu de cette twig.
L’idiome TFS consiste à extraire chaque twig d’un répertoire différent sous le répertoire racine du référentiel (même la twig maître ou la twig). Extraire une twig le placera dans un nouveau répertoire à côté de celui en cours.
En utilisant git-tfs , je peux cloner un repository ou une twig TFS dans un repository git. Je veux travailler sur un référentiel TFS avec plusieurs twigs d’une manière compatible avec l’idiome de twigment git . Mais je ne suis pas sûr de ce qui est techniquement possible ou recommandé 🙂
Si je clone tout le référentiel hors de TFS
> git tfs clone http://:8080 $/main
Cela me donnerait un git master
contenant toutes les twigs de TFS en tant que répertoires.
[master]> dir trunk feature-logon feature-search release-0.0.1
Je ne sais pas si je peux (ou comment) mapper une télécommande git sur chaque twig TFS.
> git init . [master]> git tfs clone http:// $/main/trunk .
alors
[master]> git checkout -b feature-logon [feature-logon]> git tfs clone http:// $/main/feature-logon .
Je sais que c’est techniquement incorrect, mais je ne connais pas mieux sans jouer (mon seul repo TFS est très grand, l’expérimentation prend beaucoup de temps)
Il est maintenant possible de faire en sorte que les twigs TFS soient des twigs Git correctes si vous clonez avec git-tfs . Ceci est maintenant dans la version stable! Vous commencez par cloner non pas l’intégralité du référentiel mais le tronc:
git tfs clone http://:8080 $/main/trunk
Ensuite, vous lancez branch --init
, qui crée une nouvelle twig dans le repository Git
git tfs branch --init $/MyProject/MyTFSBranch
dans ton cas :
git tfs branch --init $/main/feature-logon
Ou utilisez l’indicateur --all
sur un nouveau référentiel cloné pour créer TOUTES les twigs présentes sur le serveur TFS.
git tfs branch --init --all
Vous pouvez également cloner directement avec toutes les twigs à l’aide de l’ --with-twigs
flag --with-twigs
:
git tfs clone http://:8080 $/main/trunk --with-twigs
La documentation de cette nouvelle commande est ici . N’hésitez pas à nous faire part de vos commentaires pour l’améliorer …
Voici un moyen d’y parvenir, tout en maintenant certaines relations entre le maître et les twigs. Vous voudrez probablement le scripter. Excusez-moi si j’utilise les instructions bash plutôt que la ligne de commande Windows pour certains de mes exemples
Clonez tout d’abord le repository complet, comme dans votre premier exemple, avec des twigs comme répertoires.
Cela déplace le tronc à la racine. (j’espère qu’il n’y a pas de conflits avec vos dossiers de twig)
mv trunk/*.* .
Engagez votre nouveau maître
git commit -a -m "refactoring master"
créer une nouvelle twig
git checkout -b feature-login
Copiez les fichiers de twig sur les fichiers racine
mv feature-login/*.* .
Vous n’en avez plus besoin ici
rm -rf [all_branch_directories]
Engager la twig
git commit -a -m "refactoring feature-login"
retour au maître
git checkout master
Fais le tout encore
git checkout -b next_branch
etc..
Enfin à la fin
git checkout master rm -rf [all_branch_directories] git commit -a -m "refactoring master"
Ce n’est pas parfait, mais vous vous retrouvez avec toutes vos twigs clonées hors master et diffèrent plus ou moins correctement. AFAIK git devrait être correct si vous écrasez un fichier avec un autre fichier mais que le contenu ne change pas, ce qui permet à tout le monde de travailler.
L’inconvénient est que vous n’effacez aucun fichier dans les twigs qui ont été supprimées du tronc. Cela peut ou peut ne pas être un problème pour vous …
Qu’en est-il de plusieurs tfs-repos distants, 1 par twig? j’ai la structure suivante:
$/Root/Main/someproject (the trunk) $/Root/Releases/Branch1/someproject $/Root/Releases/Branch2/someproject
ce que j’ai fait
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
alors vous pouvez créer une twig pour chaque twig distante: git checkout -b localbranch1 tfs/Branch1
et valider dans la twig git tfs ct -i branch1
Pour pouvoir facilement fusionner les deux lignes, créez un greffon:
echo branch-commit-id trunk-parent-id > .git/infos/grafts
où les identifiants sont le hash de la première twig commit (du référentiel Releases) et un identifiant de validation parent (find manuellement)
PS: j’obtiens une erreur: le répertoire de repository git spécifié n’est pas vide non plus (je ne sais pas comment ça fonctionnait auparavant), alors j’ai ajouté manuellement la deuxième URL dans .git / config et j’ai git tfs fetch -i Branch1