web-dev-qa-db-fra.com

Est-il possible de déplacer des dossiers d'un ensemble de branches TFS vers un autre et de conserver les modifications en attente?

Actuellement, notre projet TFS (TFVC, not git) contient un dossier qui héberge la totalité de notre produit. Ce dossier contient trois branches (Dev, Main et Release), chacune contenant à son tour plusieurs différents sous-projets. Nous essayons de nous restructurer pour que des composants distincts soient contenus dans leur propre structure de branchement.

Question: Est-il possible de déplacer un dossier contenu dans une branche (pas la branche elle-même), ainsi que le dossier correspondant dans les autres branches vers un projet TFS new tout en conservant la relation et le statut des ensembles de modifications non fusionnés ? 

Voici un diagramme de notre résultat final souhaité:

 target structure

Nous voulons déplacer chacun des "Projet 1" dossiers (côté gauche) dans leur propre structure de branches (côté droit), mais nous avons besoin que tout ensemble de modifications non fusionné soit "suivi". Autrement dit, si nous essayons de fusionner de Dev à Main dans la nouvelle structure, une liste des jeux de modifications (pertinents) qui n'ont pas été fusionnés dans l'ancienne structure nous est présentée. 

Est-ce possible? Si oui, quelle série de commandes tf/tfvc} aurions-nous besoin de le retirer? Je me suis plongé dans Google, mais j'ai échoué, soit parce que je ne sais pas comment décrire cela d'une manière conviviale, soit que c'est tout simplement impossible.

Ce que j'ai essayé

  • Déplacement direct/Renommer chacun des dossiers dans le nouveau projet (pré-créer chaque branche cible Dev/Main/Release) 

    • Les changesets non fusionnés ont été perdus.
    • Tout ce que je reçois est un unique ensemble de modifications "déplacer/renommer" qui apparaît dans la liste non fusionnée pour les nouvelles branches. La fusion de que provoque l’écrasement de tout le contenu de la branche cible (c’est-à-dire que les fichiers de branche de publication sont maintenant identiques à ceux de dev). 
    • Sur le côté +, les étagères en attente "suivent automatiquement" lorsqu'elles sont non étalées
  • Branchez chaque dossier dans la nouvelle structure (sans créer au préalable les dossiers de branche cibles) 

    • Cela a créé trois branches qui n'étaient pas liées les unes aux autres. 
    • J'ai pu résoudre ce problème en faisant une fusion sans fondement entre eux (tf merge /baseless /recursive) et en prenant des fichiers de branche cible en cas de conflit; suivi par la re-parentalité 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 étagères se détachent à l'emplacement original

Si cela compte, nous sommes prêts à perdre l'historique général si c'est le seul moyen de résoudre ce problème. De préférence, nous le conserverions, même si cela signifiait stocker une copie «obsolète» de l'original quelque part. Je ne m'inquiète pas non plus du fait que les tablettes "suivent" leur source non plus ... nous n'en avons que deux qui seraient touchées et nous pouvons les gérer manuellement si nécessaire. Nous utilisons TFS sur site 2018.

Edit: en réponse à une réponse postée puis supprimée:

Je ne cherche pas à déplacer les branches, mais à extraire des dossiers au plus profond d'eux-mêmes dans leur propre structure de branche correspondante sans perdre les modifications 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 escomptés ... mais j'essaie de renommer des branches, et le déplacement des dossiers donne des résultats inattendus. 

8
pinkfloydx33

Il semble que vous puissiez obtenir ce que vous voulez en fusionnant les relations des nouveaux dossiers Dev, Main et Release et des anciens dossiers du projet. Je pense que vous pouvez faire une variante du deuxième "itinéraire" que vous avez essayé ci-dessus.

  1. Branchez le dossier ancien Version> Projet [x] dans la nouvelle Projet []] [Version] 
  2. Branchez le nouveau projet [x]> branchez le dans le nouveau projet [x]> branche principale
  3. Fusionner (sans base) le dossier old Main> Project [x] (en spécifiant le groupe de modifications à partir duquel La version old a été branchée) dans le new Project [x]> Branch
  4. Branchez le nouveau projet [x]> branche principale dans le nouveau projet [x]> branche de développement
  5. Fusionner (sans base) le dossier old Dev> Project [x] (en spécifiant le groupe de modifications à partir duquel old Main a été créé) dans la branche new Project [x]> Dev
  6. Répéter pour les autres projets

L’objectif est de créer les nouvelles relations de fusion de branche (en créant une branche [new] Release vers [New] Main, puis [New] Main vers [New] Dev. À ce stade, la relation de fusion a été établie et toutes les branches sont dans le même Ensuite, nous fondons sans fondement l’ancien [ancien] avec le [nouveau] pour principal et développeur. Pour principal, nous souhaitons doter la fusion sans fondement de l’état où Main et Release sont identiques (dans l’ancien). Pour Dev, nous voulons faire la fusion sans fondement sur l’état où Dev et Main sont identiques (dans l’ancien). Des fusions supplémentaires peuvent alors se produire de [ancien] à [nouveau] et elles doivent être détectées comme des modifications pouvant être fusionnées de [nouveau] à [nouveau ] semblable à la façon dont ils sont dans [vieux] à [vieux] 

Vous perdrez les ensembles de tablettes (mais vous pouvez toujours défaire dans l'ancien emplacement, archiver et fusionner vers le nouveau), mais l'historique doit être conservé tant que l'ancien projet n'est pas détruit.

1
Jansen McEntee