TFS: comment annuler l'extraction de fichiers non modifiés dans un fichier batch

172

Nous utilisons un fichier batch pour générer du code, et il extrait automatiquement les fichiers générés à partir de Team Foundation Server (TFS) afin de pouvoir les régénérer. La majorité de ces fichiers ne sont pas modifiés, mais le générateur ne le sait pas à l'avance.

La commande "tfs undo" annule l'extraction, mais vous demande si certaines ont été modifiées (ce que nous ne voulons pas faire). Nous ne souhaitons pas non plus archiver immédiatement les fichiers générés.

Existe-t-il une commande (ou une série de commandes) pour annuler l'extraction de tous les fichiers non modifiés sans demander à l'utilisateur?

Robert Wagner
la source
Notez que l'annulation manuelle de toutes les modifications dans l'espoir de choisir "Non à tous" lorsque vous y êtes invité à propos des fichiers qui ont changé ne fonctionnera pas correctement, car elle annulera les ADDmodifications sans invite (voir la réponse de Ray ).
Elaskanator

Réponses:

202

Jetez un œil à la commande Annuler unchanged des outils d'alimentation de Team Foundation Server Août 2011

c:\myProject> tfpt uu . /noget /recursive

Merci Matt Florence pour la mise à jour du lien.

Merci Ray Vega pour la syntaxe réelle .

Mike Chaliy
la source
1
Cela devrait être modifié / fusionné pour contenir les informations d'utilisation dans le cadre du contenu de la réponse.
mcw
4
Vous voulez vraiment lire cet article: aaubry.net/undo-checkout-on-unchanged-files-tfs.html
Byron Whitlock
17
hmm, quelque chose que presque tout le monde fait plusieurs fois par jour: "Mettons-le dans un programme d'installation séparé appelé Power Tools" ... soupir
vidstige
1
@Mike Chaliy vous penseriez. J'essaie TFS en ce moment, et je cherchais comment faire cela et je me suis retrouvé ici.
vidstige
3
Cela ne fonctionne pas si vos modifications sont des fusions. Il semble que tfpt uu considère toujours une fusion comme un vrai changement, même s'il n'y a pas de changement de fichier, et il n'y a pas d'option pour inverser ce comportement. C'est correct comme comportement par défaut, mais parfois ce n'est pas ce que vous voulez.
user1164178
124

Installez Team Foundation Server Power Tools et exécutez ce qui suit à partir de la ligne de commande à l'aide de tfpt.exe à la racine du répertoire de l'espace de travail de votre projet:

c:\myProject> tfpt uu . /noget /recursive

L'inclusion /nogetest fortement recommandée car elle empêche une mise à jour forcée de tous les fichiers de votre projet qui, en fonction du nombre total, peut prendre un temps extrêmement long.

Rayon
la source
12
Cela devrait être la réponse acceptée, elle contient tous les détails pertinents (comme le prouve le score le plus élevé).
rikoe
7
Cool. Aussi, pourquoi ne pas l'ajouter en tant qu '«outil externe» permanent à Visual Studio. Prenons ceci comme exemple: blog.kurtschindler.net/post/… Commande: [votre répertoire d'installation] \ TFPT.EXE Arguments: uu. / noget / récursif Répertoire initial: $ (SolutionDir)
rohancragg
12
La question spécifie de faire cette opération sans l'invite , mais aucune des réponses ne semble résoudre ce problème. Si vous en avez besoin, le / noprompt supplémentaire est l'option que vous recherchez. Il manque ceci dans la documentation PowerTools! Il répertorie cette option pour quelques-unes des commandes, mais pas celle-ci (UU). Il faut se méfier!
Johnny Kauffman
1
@ user20358 soit cdà l'endroit où se trouve votre répertoire d'espace de travail (par exemple, le mien était c:\myProject), soit à l'inclure explicitement après uu(en remplaçant le point .par lui)
Ray
Y a-t-il un interrupteur de force, comme / Y ou / force? On me demande toujours si je veux vraiment l'annuler, et j'aimerais que cela soit automatisé. Mettez / Y là-bas, mais cela me dit que l'option Y nécessite une valeur.
Squirrelkiller
118

Merci @mike & @ray,

Je souhaite vous faciliter la tâche.

Dans VS, dans le menu Outils, cliquez sur "Outils externes".

Outils externes

Cliquez sur Ajouter.

Entrez le titre.

Commande: tfpt.exe

Arguments: uu. / noget / récursif

Répertoire initial: [vous pouvez choisir à partir du bouton fléché].

Annuler inchangé dans la solution

Annuler inchangé dans le projet

Deux nouvelles commandes sont ajoutées au menu Outils.

Utilisez-les au besoin.

Prendre plaisir,

Ofir

Ofir
la source
3
Très cool. Vous pouvez également aller plus loin et ajouter un raccourci. Notez à quelle distance se trouve votre commande ajoutée (par exemple, il peut s'agir de la quatrième). Puis dans Outils -> Options -> Environnement -> Clavier -> et tapez dans la zone de texte "Afficher les commandes contenant" "Tools.External" et attribuez un raccourci. Par exemple, j'ai sélectionné Tools.ExternalCommand4 car ma commande d'annulation nouvellement ajoutée était la quatrième vers le bas. J'ai ensuite attribué des touches de raccourci Ctrl + Alt + U, Ctrl + Alt + U
Mario
1
Pouvons-nous s'il vous plaît avoir une version mise à jour de ceci? Si trouvé tf.exe mais qu'est-ce que la commande uu? il me dit Commande non reconnue: uu. Merci pour l'aide
Shay
1
@Shay: Fonctionne pour moi dans VS2015 avec les derniers outils électriques TFS installés.
Igor Malin
27
  1. Faites un clic droit sur votre projet
  2. Sélectionnez Annuler le paiement, puis cliquez simplement sur OK, ou quelle que soit la confirmation qui reste ...
  3. Ensuite, lors de l'annulation de l'extraction, pour chaque fichier contenant de VRAIS modifications, une invite vous demandera de confirmer l'extraction de ce fichier ... cliquez simplement sur "Non à tous"

Visual Studio saura si le fichier extrait a des modifications ou aucune.

AVERTISSEMENT: cette méthode supprime également les nouveaux fichiers, c'est-à-dire les fichiers qui ne sont pas encore archivés dans TFS. Si vous souhaitez conserver ces fichiers, excluez-les simplement de l'ensemble de fichiers que vous «annulez».

Ray Lionfang
la source
14
Be aware that this method also removes added files that are not yet checked in from TFS.... ouais, c'est un disqualifiant assez immédiat.
shortstuffsushi
1
Cela fonctionne pour la fusion de mes branches sans base. Merci. Habituellement, dans ce cas, VS a marqué Tous les fichiers de la solution comme modifiés.
KoViMa
2
c'est un enfer quand nuget récupère 10000 fichiers qui ne doivent pas être mis à jour.
Ievgen Naida
13

Mise à jour de cette question avec une réponse lors de l' utilisation de TFS2017 et VS2017 / VS2019 uniquement.

Les outils électriques n'existent pas pour TFS 2017 et les anciens ne peuvent pas bien fonctionner avec lui, mais apparemment la plupart des fonctionnalités ont été déplacées vers VS2017 lui-même ou des plugins (voir ci-dessous).

Extension Visual Studio 2017/2019

Certaines actions telles que l'annulation de fichiers inchangés ont été déplacées vers un

extension pour VS2017

extension pour VS2019

Emplacement du bouton "Annuler les modifications":

annuler l'emplacement du bouton inchangé

Bug connu

Vous devez ouvrir l '«Explorateur de contrôle de source» (et le laisser ouvert) pour que «Undo Unchanged» s'affiche dans le menu Action de la vue Pending Changes. rapporté ici .

Extension d'intégration Windows Shell

En outre, vous pouvez toujours configurer l'intégration du shell Windows via un programme d' installation distinct qui n'est plus lié à TFS Power Tools.

L'intégration du shell Windows ne fonctionne pas exactement de la même manière que les outils électriques avant, mais les actions les plus importantes ont fonctionné pour moi.

Schwarzie2478
la source
J'ai remarqué dans la question, qu'ils veulent le scénariser, pour cela je n'ai pas de solution, j'ai peur
Schwarzie2478
1
Je ne trouve pas l'option "Undo Unchanged" dans VS2017 après l'installation de l'extension liée. Ai-je oublié quelque chose ?
Erzékiel
Je ne l'ai pas beaucoup utilisé. Lorsque je l'ai utilisé pour le tester pour mon client, j'ai dû cliquer un peu dans Team Explorer et m'assurer qu'il y avait des modifications à annuler. Il est possible que cette option n'apparaisse que lorsque les modifications en attente sont mises en file d'attente pour une validation. (ou une branche change uniquement) ...
Schwarzie2478
2
@ Erzékiel L'option apparaît uniquement lorsque l'Explorateur de solutions est ouvert et prêt.
MatrixRonny
1
Cette extension fonctionne parfois et sa présence est liée à l' ouverture de l' explorateur de contrôle de source TFS et non à l'explorateur de solutions (comme certains l'ont souligné à tort) - ne mélangez pas les deux fenêtres de contrôle différentes. Toutefois; quand je dis parfois, c'est parce que ça va et vient. En ce moment, je ne l'ai pas, je l'ai fait il y a un mois. C'est un tout petit peu bogué et je crains que d'autres extensions soient le coupable, telles que Resharper et autres.
Christian
8

Si vous réintégrez simplement tous les fichiers que vous avez extraits, TFS est suffisamment intelligent pour déterminer ceux qui changent et les inclure uniquement dans l'ensemble de modifications enregistré sur le serveur.

TFS le fait en comparant les hachages MD5 du contenu des fichiers avant et après l'archivage.

Tout cela suppose que votre processus de génération met à jour purement le même ensemble de fichiers, c'est-à-dire que vous n'aurez jamais le cas où un fichier qui a été généré dans une génération précédente n'est pas nécessaire dans la génération suivante (c'est-à-dire que vous voudriez suspendre une suppression pour ce fichier) ou que les fichiers changent de nom.

Si votre processus peut potentiellement nécessiter la suppression de fichiers, le mieux serait de consulter la commande Team Foundation Power Tools ( tfpt ) et d'utiliser la commande tfpt online qui ne récupérera que les fichiers qui ont changé et sera suffisamment intelligente pour pend supprime pour tous les fichiers qui ne sont plus nécessaires ou a changé de nom et ajoute pend.

Bonne chance,

Martin.

Martin Woodward
la source
6
Merci pour cela, mais nous ne voulons pas archiver les fichiers modifiés à ce moment-là. Les modifications ne doivent pas être archivées tant que la fonctionnalité n'est pas terminée, mais celles non modifiées doivent être supprimées afin que le développeur puisse examiner les modifications.
Robert Wagner le
@RobertWagner Si vous avez une construction fermée, vous pouvez l'annuler (si elle n'interrompt pas lors de la détection de fichier identique) lorsque vous recevez l'alerte contextuelle indiquant que les modifications doivent d'abord être construites.
Elaskanator
6

Attention, l'annulation de TFS ne rétablira pas la valeur «Date de modification» du système de fichiers. C'est très frustrant, surtout si vous utilisez des outils tels que robocopy pour synchroniser des machines distantes. Même après avoir annulé votre extraction, si vous avez enregistré le fichier en mettant ainsi à jour la valeur «Date de modification», cette valeur mise à jour restera même après une extraction annulée.

Evermeire
la source
1
Soit utiliser robocopy ou un VCS, l'utilisation d'un mélange va toujours donner des incohérences. Il serait préférable de remplir directement chaque machine à partir de VCS.
Richard
4

Il y a quelques points concernant l'option uu pour tfpt (recommandé dans la plupart des autres réponses) qui n'étaient pas clairs pour moi au début. Tout d'abord, c'est l'aide de la ligne de commande accessible avec la commandetfpt uu /?

Annule les modifications redondantes en attente. Si l'état d'un élément avec une modification en attente est le même que sur le serveur, la modification est annulée.

Utilisation: tfpt uu [/ changeset: changesetnum] [/ recursive] [/ noget] [filespec ...]

  • / changeset Compare l'espace de travail aux états des éléments à la version de l'ensemble de modifications spécifiée au lieu de la dernière version
  • filespec ... Vérifiez uniquement les spécifications de fichier répertoriées pour les modifications redondantes
  • / recursive Vérifie les spécifications de fichier spécifiées avec une récursivité complète
  • / noget Ne pas lancer get avant de vérifier

L'option / changeset ne peut pas être utilisée avec les spécifications de fichier ou / recursive.

Maintenant, permettez-moi de décomposer la commande qui est recommandée dans les autres réponses.

tfpt uu . /noget /recursive
  • tfpt uu spécifie que nous souhaitons utiliser la commande 'Undo Unchanged'.
  • . indique (je suppose) que le répertoire de travail actuel doit être utilisé comme spécification de fichier.
  • /noget garantit que «obtenir la dernière version» n'est pas appelé avant d'annuler les fichiers inchangés.
  • /recursivegarantit que non seulement la spécification de fichier sera prise en compte, mais tous les dossiers et fichiers enfants récursifs. Cela semble dépendre de la spécification du fichier - s'il n'y en a pas, tout l'espace de travail est traité.

Il y a donc quelques choses à noter ici concernant la commande d'en haut ...

  • Cela dépend du répertoire de travail.
  • Il ne traite pas l'intégralité de l'espace de travail.

J'ai trouvé que la commande suivante fonctionne le mieux pour moi - elle traitera tout l'espace de travail.

tfpt uu /noget

Notez qu'il dépend toujours du répertoire de travail dans lequel tfpt l'utilise pour déterminer quel espace de travail doit être traité. Mais tant que vous fournissez un chemin vers un fichier ou un dossier dans l'espace de travail, vous êtes prêt à partir.

Scott Munro
la source
3

Je peux voir l'approche de Ray LionFang ci-dessus. Je ne peux pas faire de commentaire car je n'ai pas le représentant. Bien que j'aime cette approche car il n'y a pas de changements requis pour les outils, etc.

  1. Faites un clic droit sur votre projet
  2. sélectionnez annuler le paiement, puis cliquez simplement sur OK, ou quelle que soit la confirmation qui reste ...
  3. puis, lors de l'annulation de l'extraction, pour chaque fichier contenant de VRAIS modifications, une invite vous demandera de confirmer l'extraction de ce fichier ... cliquez simplement sur "Non à tous"
  4. Visual Studio saura si le fichier extrait a des modifications ou aucune. Sachez que cette méthode supprime également les fichiers ajoutés qui ne sont pas encore archivés à partir de TFS ...

....... Il y a un problème avec cette approche dans la mesure où le fait de cliquer sur "Non à tous" conserve quelques fichiers qui ne sont pas modifiés. Il semble faire quelque chose comme Annuler les fichiers non modifiés jusqu'à ce qu'il atteigne le premier fichier réellement modifié, puis ignore le reste des fichiers non modifiés, si cela a du sens. Je n'ai vu cet effet que de temps en temps.

Une solution potentielle consiste à suivre le processus ci-dessus, mais au lieu de cliquer sur "Non à tous", appuyez sur "Non" pour chaque fichier. Étant donné que cela peut prendre un certain temps en fonction du nombre de fichiers avec lesquels vous travaillez, ce que je fais normalement est de maintenir "ALT + N", et cela accélère simplement à travers tous les fichiers tout en annulant TOUS les fichiers non modifiés.

Cendre
la source
veuillez être avisé car cela ne peut pas être suffisamment souligné. Les fichiers nouvellement ajoutés au projet sont également supprimés avec cette approche. Ceci est également mentionné sur plusieurs des autres réponses.
Christian
-20

Pour autant que je sache, dans TFS, si vous extrayez un projet d'équipe, l'ensemble du projet est extrait et vous n'avez pas le contrôle des fichiers qui sont supprimés. Si vous souhaitez empêcher l'archivage de certains fichiers, vous pouvez les verrouiller.

Au travail, nous détestons tous TFS.

achinda99
la source
1
Nous pouvons extraire des fichiers individuels et le verrouiller ne permettrait pas au développeur de les archiver.
Robert Wagner
5
J'allais voter, mais "Au travail, nous détestons tous TFS." l'a sauvé.
James