web-dev-qa-db-fra.com

TFS: Comment annuler l'extraction de fichiers non modifiés dans un fichier de traitement par lots

Nous utilisons un fichier de commandes pour générer du code, qui extrait automatiquement les fichiers générés à partir de Team Foundation Server (TFS) afin qu'il puisse 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 le processus d'extraction, mais indique si certaines d'entre elles ont été modifiées (ce que nous ne voulons pas faire). Nous ne voulons 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?

170
Robert Wagner

Jetez un coup d’œil à la commande Annuler Unchanged de la Team Foundation Server Power Tools Août 2011

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

Merci Matt Florence pour la mise à jour du lien.

Merci Ray Vega pour syntaxe actuelle .

199
Mike Chaliy

Installez outils puissants de Team Foundation Server et exécutez la commande suivante à partir de la ligne de commande, à l'aide de tfpt.exe situé à la racine du répertoire de l'espace de travail de votre projet:

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

Comprenant /noget est fortement recommandé, car il évite de "forcer" tous les fichiers de votre projet, ce qui peut prendre beaucoup de temps en fonction du nombre total.

124
Ray Vega

Merci @mike & @ray,

Je souhaite rendre les choses plus faciles.

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

External Tools

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é].

Undo unchanged in solution

Undo unchanged in project

Deux nouvelles commandes sont ajoutées au menu Outils.

Utilisez-les quand vous en avez besoin.

Prendre plaisir,

Ofir

118
Ofir
  1. Faites un clic droit sur votre projet
  2. Sélectionnez Annuler la commande, puis cliquez simplement sur OK, ou quelle que soit la confirmation qui reste ...
  3. Ensuite, tout en annulant l'extraction, pour chaque fichier comportant de VRAIES modifications, un message vous demandera de confirmer l'extraction pour ce fichier ... cliquez simplement sur "Non à tous".

Visual studio saura si le fichier extrait contient des modifications ou aucune.

WARNING: Cette méthode supprime également les nouveaux fichiers , c'est-à-dire les fichiers qui n'ont pas encore été archivés dans TFS. Si vous souhaitez conserver ces fichiers, excluez-les simplement de l'ensemble de fichiers que vous "annulez".

26
Ray Lionfang

Mise à jour de cette question avec une réponse lorsque vous travaillez avec TFS2017 et VS2017 / VS2019 uniquement.

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

Extension Visual Studio 2017/2019

Certaines actions comme annuler des fichiers non modifiés ont été déplacées vers un

extension pour VS2017

extension pour VS2019

Emplacement du bouton "Annuler inchangé":

undo unchanged button location

Bug connu

Vous devez ouvrir "l'Explorateur de contrôle de code source" (et le laisser ouvert) pour que l'option "Annuler l'inchangé" soit affichée dans le menu Action de la vue Modifications en attente. rapporté ici .

Extension d'intégration Windows Shell

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

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

8
Schwarzie2478

Si vous archivez 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’enregistrement.

Tout cela suppose que votre processus de génération met à jour de manière purement le même ensemble de fichiers, ce qui signifie que vous ne rencontrerez jamais le cas où un fichier généré lors d’une génération précédente n’est plus nécessaire dans la génération suivante (c’est-à-dire que vous souhaitez 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 en ligne tfpt qui ne fera que Découvrez les fichiers qui ont été modifiés et qui seront suffisamment intelligents pour suspendre les suppressions pour tous les fichiers devenus inutiles ou dont le nom a été modifié.

Bonne chance,

Martin.

8
Martin Woodward

Veillez à ce que l'annulation de TFS ne rétablisse pas la valeur "Date de modification" du système de fichiers. Cela 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 à jour la valeur "Date de modification", cette valeur mise à jour restera identique même après une extraction.

5
evermeire

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, il s'agit de l'aide en ligne de commande accessible à l'aide de la commande tfpt uu /?

Annule les modifications en attente redondantes. Si l'état d'un élément avec une modification en attente est identique à celui du serveur, la modification est annulée.

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

  • / changeset Compare l'espace de travail aux états d'élément dans la version de l'ensemble de modifications spécifiée au lieu de la dernière version
  • filespec ... Vérifie uniquement les modifications de fichiers dans la liste de fichiers répertoriée
  • / récursif Vérifie les fichiers spécifiés avec une récursion complète
  • / noget Ne lancez pas get avant de vérifier

L'option/changeset ne peut pas être utilisée avec filespecs ou/récursif.

Maintenant, laissez-moi 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é en tant que spécification de fichier.
  • /noget s'assure que la version la plus récente n'est pas appelée avant d'annuler les fichiers non modifiés.
  • /recursive _ s'assure que non seulement la spécification de fichier sera prise en compte, mais également tous les dossiers et fichiers enfants récursifs. Cela semble dépendre de la spécification de fichier - s'il n'y en a pas, alors tout l'espace de travail est traité.

Donc, il y a quelques choses à noter ici concernant la commande d'en haut ...

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

J'ai constaté que la commande suivante fonctionne le mieux pour moi: elle traitera l'intégralité de l'espace de travail.

tfpt uu /noget

Notez qu'il dépend toujours du répertoire de travail car tfpt l'utilise pour déterminer quel espace de travail doit être traité. Mais tant que vous fournissez un chemin d'accès à un fichier ou à un dossier dans l'espace de travail, vous pouvez continuer.

4
Scott Munro

Je peux voir l'approche de Ray LionFang ci-dessus. Je ne peux pas commenter car je n'ai pas le représentant. Bien que j'aime cette approche car aucun changement n'est requis dans Outils, etc.

  1. Faites un clic droit sur votre projet
  2. sélectionnez Annuler la commande, puis cliquez simplement sur OK, ou quelle que soit la confirmation qui reste ...
  3. puis, tout en annulant l'extraction, pour chaque fichier comportant des modifications REELLES, un message vous demandera de confirmer l'extraction pour ce fichier ... cliquez simplement sur "Non à tous".
  4. Visual studio saura si le fichier extrait contient 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 en ce que frapper "Non à tous" conserve quelques fichiers qui ne sont pas modifiés. Cela semble faire quelque chose comme annuler des fichiers non modifiés jusqu'à atteindre le premier fichier qui est réellement modifié, puis ignorer le reste des fichiers non modifiés, si cela a un sens. Je n'ai vu cet effet que de temps en temps.

Une solution potentielle consiste à suivre le processus ci-dessus, mais au lieu d'appuyer sur "Non à tous", cliquez sur "Non" pour chaque fichier. Étant donné que cela peut prendre un certain temps en fonction du nombre de fichiers sur lesquels vous travaillez, ce que je fais normalement est de maintenir la touche "ALT + N" enfoncée et d'accélérer la lecture de tous les fichiers tout en annulant TOUS les fichiers non modifiés.

3
Ash