2010-09-13 3 views
6

J'ai une structure TFS très salissante que j'essaye de nettoyer (merci à mon prédécesseur). J'ai maintenant une situation où je dois apporter des changesets sélectivement d'une branche à l'autre où ils n'ont pas de relation parent/enfant et je ne veux pas que ces changements passent à travers leur tronc partagé. Comment puis-je faire ceci?Dans TFS, comment puis-je sélectionner un ensemble de modifications dans une branche non liée?

J'ai essayé une fusion sans base - In TFS, how do I do a baseless merge on specific changesets? - qui m'a indiqué qu'il n'y avait aucun changement à fusionner.

Ce que je veux réaliser est quelque chose comme TFS : Can a shelveset be restored to another location? sauf avec un changeset.

Dans GIT, je pense que ce serait un simple choix.

Ma structure ressemble à:

Y-C1-C2-C3 
/
X------------- 
    \ 
    Z 

Et la question est de savoir comment puis-je obtenir C2 de Y en Z sans passer par X?

+0

Quelles options avez-vous utilisées dans votre tentative de fusion sans base? Avez-vous utilisé l'option/force? –

+0

Oui j'ai essayé la force et quelques autres choses que j'ai lu autour de l'endroit mais avec le même résultat - qu'il n'y avait aucun changement. À la fin, j'ai mordu la balle et tout a fusionné manuellement ... il a fallu 14 heures, mais au moins, je suis à 100% confiant dans le résultat. – idieeasy

Répondre

3

Nous avons une situation similaire, bien que, dans notre cas, nous effectuions une fusion sans base à partir de plusieurs branches dans une branche de construction "scratch". La seule façon de le faire est d'écrire notre propre utilitaire en utilisant l'API TFS. Les bonnes nouvelles sont, vous devriez être capable d'accomplir cela en moins de quelques centaines de lignes de code.

Les étapes de base sont les suivants:

  • Connectez-vous à TFS
  • Obtenez une instance de la VersionControlServer (appelons-le VCS)
  • Créer un espace de travail
  • Faites un VCS.GetChangeset()
  • Itérer par le Changes pour obtenir la liste des articles qui ont changé
  • Effectuer un Workspace.Merge pour chacun des éléments de votre branche source vers votre branche de destination.
  • Archivez les éléments dans la branche de destination.
  • espace de travail Supprimer
+0

On dirait que c'est la seule façon d'aller à côté de le faire manuellement (ce que j'ai fait plutôt que de tenir mon équipe). Ce devrait être un problème simple/commun? – idieeasy

+0

Les bonnes pratiques indiquent que vous ne devriez pas avoir à choisir. Si vous le faites souvent, votre stratégie de branchement pose problème. Vous voudrez peut-être envisager de vous brancher sur la fonctionnalité à la place. Dans notre situation, nous le faisons pour les versions d'essai. – Robaticus

+0

Vous avez absolument raison, il y avait un problème avec la stratégie de branchement et cette question s'est posée alors que j'essayais de réorganiser les branches afin que je n'aurais pas autant de mal à fusionner. – idieeasy

1

Son plus simple pour le faire en utilisant Visual Studio.

Dans Visual Studio, utilisez l'Assistant Fusion de contrôle de code source pour fusionner les branches non liées.

Il a une option pour fusionner les changesets sélectifs. La seule restriction est que les changesets doivent être consécutifs

+0

Si vous souhaitez fusionner des ensembles de modifications non consécutifs, vous n'avez qu'à répéter l'ouverture de l'Assistant Fusion de contrôle de code source jusqu'à ce que vous ayez terminé. Vous pouvez choisir de valider entre chaque fusion ou dans un commit à la fin. –

Questions connexes