Puis-je désinscrire dans une autre branche dans tfs 2008?


105

Supposons qu'un développeur de mon équipe ait mis de côté ses modifications qu'il a effectuées dans la branche A. Et je travaille sur la branche B. Puis-je annuler ses modifications dans la branche B? (Par GUI ou invite de commande)


Démo de la commande ci-dessus: Bases de la commande Unshelve
Rohit

Réponses:


129

Les outils d'alimentation de Visual Studio devraient vous permettre de le faire.

C:\src\2\Merlin\Main>tfpt unshelve /?
tfpt unshelve - Unshelve into workspace with pending changes

Allows a shelveset to be unshelved into a workspace with pending changes.
Merges content between local and shelved changes. Allows migration of shelved
changes from one branch into another by rewriting server paths.

Usage: tfpt unshelve [shelvesetname[;username]] [/nobackup]
                     [/migrate /source:serverpath /target:serverpath]

 shelvesetname          The name of the shelveset to unshelve
 /nobackup              Skip the creation of a backup shelveset
 /migrate               Rewrite the server paths of the shelved items
                        (for example to unshelve into another branch)
 /source:serverpath     Source location for path rewrite (supply with /migrate)
 /target:serverpath     Target location for path rewrite (supply with /migrate)
 /nobackup              Skip the creation of a backup shelveset

Par exemple, pour fusionner un ensemble d'étagères appelé "Shelve Set Name" créé sur Branch1 vers Branch2, utilisez ceci:

>tfpt unshelve "Shelve Set Name";domain\userName /migrate /source:"$/Project/Branch1/" /target:"$/Project/Branch2/"

2
Ooohhh ... Curt, je pense que tu viens de faire ma journée. Je vais devoir essayer ça plus tard.
Herms

D'où vous procurent les outils électriques?
Guy le

3
Oui, les outils électriques DEVRAIENT vous laisser faire cela, mais malheureusement, la fusion se passe horriblement mal à chaque fois, donc c'est presque inutile.
Tim Booker

La fusion n'est pas si mauvaise. J'ai trouvé que la fusion automatique fonctionne dans 90% des cas.
Justin Rudd

2
Juste essayé. J'ai déplacé de nombreux fichiers dans l'étagère et malheureusement cela ne semble pas bien fonctionner. Vous devez «migrer» manuellement tous ces fichiers (il n'y a pas non plus de sélection multiple). Et puis ils sont ajoutés en tant que nouveaux fichiers à l'espace de travail. Je ne peux pas l'utiliser, car je ne peux plus le fusionner.
Stefan Steinegger

34

Solution alternative au tfpt qui évite d'avoir à fusionner chaque fichier manuellement

Le problème avec l'outil électrique tfs est que vous effectuez une «fusion sans base», vous devez donc confirmer chaque fichier . J'avais une étagère de plus de 800 fichiers et je ne fais jamais confiance au bouton de fusion automatique et je ne voulais pas parcourir chaque fichier à tour de rôle - j'ai donc dû trouver un autre moyen!

  • Téléchargez et installez le TFS Shelveset Sidekick .
  • L'outil apparaît sous «Outils» dans VS2010
  • Exécutez l'outil 'Shelveset Sidekick', cliquez sur Rechercher pour afficher les étagères
  • Faites un clic droit sur votre étagère et sélectionnez `` Exporter l'étagère ''
  • Enregistrer dans un emplacement vide tel que C:\temp\shelveset-name
  • Maintenant, ayez une structure de répertoire complète contenant JUSTE les nouveaux fichiers

(Remarque: il n'y a pas de barre de progression lors de l'exportation - donc si vous avez une grande étagère qui prend beaucoup de temps à exporter, vous devrez simplement vérifier dans l'Explorateur Windows (Fichier> Propriétés> Taille) que les fichiers sont toujours en baisse si vous pense que c'est gelé).

Il ne vous reste plus qu'à les copier dans la nouvelle branche avec l'Explorateur Windows.

Cela a fonctionné pour moi:

  • Vérifier d'abord toute la solution (dans la nouvelle branche)
  • Fermer cette solution
  • Mettez TFS hors ligne à partir de VS ( outil pour ce faire ) - voir ci-dessous pourquoi cela est important ...
  • Copiez les fichiers dans l'Explorateur Windows. La structure des répertoires dans c:\temp\shelveset-namedevra être renommée pour correspondre à la nouvelle branche. Astuce: assurez-vous de copier au bon endroit !!!
  • Mettez VS en ligne
  • Il devrait trouver tous les changements et ajouter les nouveaux fichiers
  • S'il vous demande de lier le sourcecontrol, assurez-vous que le chemin est correct pour la nouvelle branche.
  • Testez - puis archivez les nouveaux fichiers

Important: j'ai constaté que si vous ne mettez pas TFS hors ligne pour la première fois, vous vous retrouverez avec tous les nouveaux fichiers (de votre ensemble de modifications des étagères) apparaissant sans une petite coche rouge et vous devrez les exclure et les inclure à nouveau pour les amener à ajouter. Si quelqu'un a une solution alternative à ce problème, j'aimerais savoir - le rafraîchissement ne semble pas fonctionner.


Cette méthode est plus facile pour les étagères plus grandes et c'est celle que j'ai suivie. Merci!
Ani

Cette méthode est vraiment meilleure pour les étagères plus grandes
Aamir

Eh bien, vous pouvez vous en sortir sans déconnecter TFS. Mais je ne suis pas sûr que cela en vaille la peine. Ce que j'ai fait a été d'exécuter l'action Comparer - dans l'Explorateur de contrôle de source à partir du menu contextuel ouvert sur le dossier approprié. On peut filtrer la sortie pour n'afficher que les éléments qui sont différents. Ensuite, il permet de faire une sélection multiple sur eux et de les vérifier tous à la fois. Mais je suppose que mettre TFS hors ligne est plus rapide et plus simple que cela.
marque

Malheureusement, cela ne fonctionne pas pour moi lorsque j'ajoute des modifications dans le plateau. J'obtiens une erreur "Impossible de récupérer le fichier mis en attente. Une modification en attente de mise en attente sur un fichier est requise".
John Saunders

@JohnSaunders vous voulez dire une étagère avec des ajouts ou des ajouts exclusifs? Je n'ai pas eu besoin de faire ça depuis des années :)
Simon_Weaver

1

Les informations de l'étagère incluent le chemin d'accès spécifique vers lequel elles vont. Malheureusement, je ne connais aucun moyen automatique de déverrouiller à un autre endroit que celui où il a été mis en attente. Les fois où j'ai voulu faire cela, j'ai dû extraire les fichiers équivalents dans la nouvelle branche, retirer de l'ancienne branche, puis copier manuellement les fichiers.

EDIT: Eh bien, je suppose que je le faisais à la dure. Je vais devoir essayer la solution de Curt. :)


0

J'ai passé beaucoup de temps à y parvenir et j'avais peu de problèmes à surmonter. C'est possible mais ici quelques problèmes et quelques règles à suivre pour éviter ces problèmes

Erreur:

impossible de déterminer l'espace de travail

Ce problème particulier a été résolu en exécutant la commande à partir du dossier racine de la branche source . Ceci est contraire à certaines réponses sur SO où ils disent d'utiliser la branche "cible" - non, utilisez "source":

cd [your !!source!! branch root]
tfpt unshelve /migrate /source:"$/MyCollection/Development/Maint1.1" /target:"$/MyCollection/Development/Maint1.2" "myShelveset;UserName"

Le deuxième numéro est apparu après cela. Il semble qu'il ne puisse pas se connecter au serveur TFS. Ce que j'ai réalisé, j'ai plusieurs VS installés et connectés à différents serveurs TFS. J'utilisais VS12 et j'avais un espace de travail et une connexion au serveur. Mais je ne savais pas que la même connexion devait être répliquée dans VS13 pour que TFPT2013 fonctionne. Il se connecte au même serveur et espace de travail.

J'ai également essayé de le faire en utilisant TFPT2015 mais je l'ai installé et il n'a pas installé TFPT.exe, il était donc inutile. J'ai donc essayé de TFPT2013 à TFS2015 et cela a fonctionné pour cette commande particulière. Je me demande, pourquoi pas, si VS12 / 13 fonctionne bien contre TFS2015?

Résumer

  • Utilisez CMD ou DevCMD - peu importe
  • exécuter la commande à partir du dossier racine de la branche source
  • vérifier la connexion au serveur Team Explorer pour des VS spécifiques
  • TF Power Tools 2013 fonctionne avec TFS v15, au moins l' option de migration fonctionne

0

Les étapes suivantes peuvent être utilisées pour les étagères de petite taille (~ 20 fichiers ou moins).

  1. Sur le plateau et les branches cibles, commencez par enregistrer ou annuler toutes les mises à jour en attente.
  2. Sur la branche du jeu de tablettes, retirez les fichiers du jeu de rayons applicable.
  3. Sur la branche cible, extrayez tous les fichiers existants qui se trouvaient dans le plateau non protégé.
  4. Comparez les fichiers non protégés de la branche du plateau avec ceux de la branche cible pour identifier les fichiers qui nécessitent des mises à jour de fusion (le cas échéant).
  5. Si nécessaire, effectuez manuellement les mises à jour de fusion des fichiers applicables de l'étape précédente et enregistrez ces fichiers dans l'espace de travail de la branche cible.
  6. Copiez les autres fichiers de l'ensemble de tablettes de l'espace de travail de la branche de l'ensemble de tablettes vers l'espace de travail de la branche cible.
  7. Comparez les nouveaux fichiers mis à jour dans l'espace de travail de la branche cible avec les fichiers archivés. Faites les corrections nécessaires.
  8. Archivez les nouveaux fichiers mis à jour sur la branche cible.
  9. Annulez les fichiers non archivés sur la branche du plateau.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.