TFS: remplacer une branche par une autre

Est-il possible d'écraser une branche à l'autre?

ou est-ce la seule solution pour supprimer la branche B et créer une nouvelle branche à partir de la branche A?

17
tfs
demandé sur Henrik 2010-01-19 13:49:08

4 réponses

A moins que vous n'utilisiez TFS 2010, je recommande D'utiliser Merge + Resolve pour synchroniser les deux branches.

# cancel out of conflict dialog
tf merge A B -r -force -version:T
tf resolve B -r -auto:acceptTheirs

cela devrait égaliser tout, sauf pour les fichiers qui n'ont été créés que dans B et qui n'ont jamais été fusionnés. Utilisez la Diff de dossiers pour les trouver et les rapprocher.

Delete + rebranch dans 2005/2008 court le risque de cauchemar-à-debug conflits d'espace de noms dans l'avenir. L'autre option, si vous avez 2008, est de détruire + rebranch. Évidemment, cela suppose vous êtes ok avec perte de toute l'histoire de la copie originale de B.

21
répondu Richard Berg 2015-10-21 23:09:03

Dans Visual Studio 2010, j'ai simplement utilisé le fondement de fusion pour obtenir ceci:

Tf de fusion /sans fondement [chemin d'accès source] [chemin] /recursive

lorsque la fenêtre resolve conflicts apparaît, sélectionnez L'option' Take source version'. Notez que les fichiers n'existent que dans target ne seront pas supprimés en utilisant baseless merge, mais vous pouvez comparer les 2 branches pour identifier la différence et les supprimer manuellement.

se référer à: http://msdn.microsoft.com/en-us/library/bb668976.aspx

16
répondu Showching Tong 2013-08-12 10:05:44

j'ai eu du succès à l'aide de réponse de Richard Berg mais se sentait comme s'il y avait quelques détails qui manquaient. C'est ainsi que j'ai pu éliminer les différences liées à la résolution de conflits et à des ensembles de modifications qui n'avaient pas été fusionnées à la source et rendre la cible identique à la source. Notez que c'est comme ça que je vais faire référence aux branches-source est celui qui ne devrait pas être changé alors que target est celui qui devrait être rendu identique à source.

  1. assurez-vous d'avoir la dernière version des branches source et cible dans votre espace de travail. Assurez-vous également que vous n'avez pas toutes les modifications en attente.
  2. écarter tous les candidats pour les fusions de la branche cible à la branche source. Ceci, pour éviter l'une de ces différences d'être involontairement fusionnée dans la branche source plus tard.

tf merge $/target $/source /recursive /discard

Remarque: assurez-vous que vous avez défini le dossier de travail à un chemin dans votre espace de travail de sorte que l'outil TF sache quel espace de travail et quel serveur TFS utiliser.

  1. vérifier qu'il y a des différences entre les directions générales qui doivent être corrigées - si ce n'est pas le cas, aucune autre mesure n'est requise.

    3.1. Voir l'historique sur la branche cible et trouver la dernière fusion complète de la source à la cible ( Ignorer toutes les fusions cherry picking car cela résultera en beaucoup de faux positifs) - noter le certain nombre de modifications. Une alternative plus facile serait d'effectuer une fusion de la branche source dans la branche cible pour obtenir la dernière version de la branche source dans la branche cible.

    3.2. Cliquez avec le bouton droit de la souris sur la branche source dans L'Explorateur de contrôle des sources et sélectionnez Comparer dans le menu contextuel. Ne prenez la dernière version pour la source que si vous avez fusionné la branche source dans la branche cible à l'étape 2.1. Sinon, sélectionnez Changeset dans la boîte bascule Version | Type Source. et puis entrez le numéro de révision de l'étape 2.1.

    3.3. Utilisez la flèche pointant vers le bas sur le bouton Parcourir à côté du champ Chemin cible pour sélectionner le chemin du serveur. Ensuite, sélectionnez la branche cible dans la boîte de dialogue qui s'ouvre.

enter image description here

3.4. Cliquez sur OK dans la boîte de dialogue Comparer pour effectuer la comparaison.

  1. effectuer une fusion de la branche source vers la branche cible et passer l'option force. Ce sera ignorez l'historique de fusion et les changesets de fusion même s'ils ont été fusionnés dans le passé.

tf merge $/source $/target /recursive /force /version:T

Remarque: la spécification de la version T indique la dernière version.

  1. fermez la boîte de dialogue conflits de fusion.

  2. résoudre automatiquement tous les conflits en choisissant la branche source.

tf resolve $/target /recursive -auto:TakeTheirs

  1. Vérifier dans.

  2. confirmer qu'il n'y a plus de candidats pour les fusions de la cible vers la source et qu'il n'y a pas de différences entre les deux branches (cette fois en utilisant les dernières versions car nous avons fait une fusion forcée de la dernière version à l'étape 4.).

voir MSDN pour plus de détails sur le tf fusionner et résoudre commandes.

3
répondu Scott Munro 2017-05-23 12:34:20

Supprimer la branche B et en créer un nouveau à partir de la branche A.

Est-il une raison pourquoi vous ne voulez pas le faire?

-1
répondu Martin Woodward 2010-01-19 12:25:36