Actuellement, notre projet TFS (TFVC, non git) contient un dossier qui héberge l'intégralité de notre produit. Ce dossier contient trois branches (Dev, Main et Release) chacune contenant à leur tour de nombreux sous-projets différents. Nous essayons de restructurer de manière à ce que les composants distincts soient contenus dans leur propre structure de branches.
Question : Est-il possible de déplacer un dossier contenu sous une branche (pas la branche elle-même), ainsi que son dossier correspondant dans les autres branches, dans un nouveau projet TFS tout en maintenant la relation et le statut des changesets non fusionnés ?
Voici un schéma de notre résultat final souhaité :
Nous souhaitons déplacer chacun des "Project 1" dossiers (côté gauche) dans leur propre structure de branches (côté droit), mais nous avons besoin que les changesets non fusionnés "suivent". Autrement dit, si nous tentons de fusionner de Dev vers Main dans la nouvelle structure, nous devons voir une liste des changesets (pertinents) qui n'ont pas été fusionnés dans l'ancienne structure.
Est-ce possible ? Si oui, quelle série de commandes tf
/tfvc aurions-nous besoin d'exécuter pour y parvenir ? J'ai fait des recherches approfondies sur Google, mais je n'ai rien trouvé - soit parce que je ne sais pas comment décrire cela de manière efficace pour la recherche, soit parce que c'est tout simplement impossible.
Ce que j'ai essayé :
-
Déplacer/Renommer directement chacun des dossiers dans le nouveau projet (en pré-créant chacune des branches cibles Dev/Main/Release)
- Les changesets non fusionnés ont été perdus.
- Tout ce que j'obtiens est un seul changeset de "déplacement/renom" qui apparaît dans la liste des non fusionnés pour les nouvelles branches. Fusionner celui-ci provoque l'écrasement de tout dans la branche cible (c'est-à-dire que les fichiers de la branche Release sont désormais identiques à ceux de Dev).
- Le bon côté, les shelvesets en attente "suivent automatiquement" lorsqu'ils sont retirés.
-
Brancher chaque dossier dans la nouvelle structure (cette fois sans pré-créer les dossiers des branches cibles)
- Cela a créé trois branches qui n'étaient pas liées entre elles.
- J'ai pu résoudre cela en faisant une fusion sans base entre elles (
tf merge /baseless /recursive
) et en prenant les fichiers de la branche cible en cas de conflit ; suivi de la reparentation des branches. (Comme expliqué ici) - Contrairement à ce qui précède, les fichiers eux-mêmes étaient corrects (rien n'a été écrasé).
- Les changesets non fusionnés ont été perdus.
- Les shelvesets sont déshelvés à l'emplacement original
Si cela est important, nous sommes prêts à perdre l'historique global si c'est la seule façon de résoudre ce problème. Idéalement, nous aimerions le conserver, même si cela signifiait stocker une copie "déconseillée" de l'original quelque part. Je ne suis pas tellement préoccupé par le fait que les shelvesets "suivent" leur source... nous en avons seulement deux qui seraient affectés et nous pouvons les gérer manuellement si nécessaire. Nous utilisons TFS 2018 en local.
Édition : en réponse à une réponse qui a été postée puis supprimée :
Je ne cherche pas à déplacer les branches, mais à extraire des dossiers profondément à l'intérieur d'eux dans leur propre structure de branches correspondante sans perdre les changements en attente. Je montre seulement deux niveaux ci-dessus, mais en réalité, ils sont beaucoup plus profonds. Je suis capable de tf rename
une branche entière dans un bac à sable et d'obtenir les résultats attendus... mais renommer des branches n'est pas ce que j'essaie de faire, et déplacer les dossiers donne des résultats inattendus.