Comment faire pour que TFS 2010 détecte les modifications apportées aux fichiers en dehors de Visual Studio?


118

J'utilise Team Foundation Server 2010 avec Visual Studio 2010.

Chaque fois que je modifie un fichier en dehors de Visual Studio, TFS ne semble pas détecter la modification apportée au fichier et ne m'offre donc pas la possibilité d'archiver le fichier une fois qu'il a été modifié.

Comment cela peut-il être résolu?


18
Subversion ou Git (et peut-être d'autres) comparent les hachages de fichiers au lieu de l'API pour archiver / extraire un fichier. Beaucoup plus simple et beaucoup moins risqué!
Steve B

8
pire TFS ne remarque même pas qu'un fichier modifié doit être archivé, vous pouvez donc souvent l'oublier ... jusqu'à ce que votre collègue le vérifie et réalise que votre code ne se compile pas ou ne fonctionne pas. Pas étonnant que les gens disent que TFS est "VSS sur les stéroïdes" - mieux, mais a encore de nombreux problèmes de VSS.
gbjbaanb

C'est VSS sur les stéroïdes, de la même manière que les stéroïdes détruisent votre corps.
Ian Kemp

Réponses:


48

Si vous disposez d'une connexion réseau à votre serveur pendant que vous travaillez en dehors de Visual Studio, il est probablement préférable d'extraire le fichier avant de le modifier, soit en utilisant le client de ligne de commande tf, soit en utilisant l'intégration de shell de l'Explorateur Windows qui est disponible dans la version TFS Power Tools . (De plus, un nombre croissant d'autres outils ont une intégration TFS qui rend cela automatique, mais si vous n'utilisez que le bloc-notes, cela doit toujours être une étape manuelle.)

Bien sûr, il arrive souvent que vous travailliez et que vous ne disposiez pas d'une connexion réseau qui vous permette d'extraire les fichiers.

Si vous savez quels fichiers vous avez modifiés, vous pouvez simplement les extraire à partir de Visual Studio, puis vous pourrez les réintégrer.

Si vous ne savez pas quels fichiers vous avez modifiés, vous pouvez détecter les modifications en exécutant la tfpt onlinecommande (qui fait également partie de la version Power Tools). Cela permettra de localiser les fichiers qui ont été modifiés localement et d'extraire ces fichiers du serveur.


Visual Studio ne semble pas détecter les modifications apportées aux fichiers simplement en les retirant. J'ai juste essayé d'extraire un dossier et le contenu est apparu dans les modifications en attente sous forme de modifications. Ensuite, j'ai supprimé le dossier dans l'Explorateur de fichiers et actualisé les modifications en attente, mais Visual Studio n'a pas dit que les fichiers avaient été supprimés dans les modifications en attente. En outre, les fichiers étaient toujours présents dans l'Explorateur de solutions.
Kyle Delaney

160

TFS a une commande "Réconcilier" pour cela:

  1. Ouvrez l' explorateur de contrôle de source
  2. Cliquez avec le bouton droit sur le dossier contenant les modifications et choisissez Comparer
  3. Sélectionnez les fichiers que vous souhaitez réconcilier (appuyez sur CTRL+ Apour sélectionner tous les fichiers)
  4. Cliquez sur le bouton Réconcilier
  5. Définissez les options dans la boîte de dialogue Réconcilier les différences de dossier . Assurez-vous que les fichiers qui n'ont pas de modifications en attente sont définis sur Extraire
  6. Cliquez sur OK
  7. Si vous avez des modifications locales de la Check Out dialogue sera affiché. Définir le type de verrouillage préféré
  8. Cliquez sur Check Out

Réconcilier les différences de dossier

Voir aussi: Réconcilier les différences entre les dossiers


13
C'est la meilleure réponse car elle ne nécessite pas la ligne de commande ou un risqué «Annuler les modifications en attente».
NickH

4
J'ai sauvé ma journée! J'ai suivi vos étapes avec précision et cela a fonctionné exactement comme prévu. :-)
Gilad Barner

4
A travaillé comme décrit. Cela devrait être la meilleure réponse.
Nicolas

Malheureusement, lorsque je fais cela sur tout mon projet, j'obtiens l'erreur Le chemin spécifié, le nom de fichier ou les deux sont trop longs. Le nom complet doit comporter moins de 260 caractères et le nom du répertoire doit comporter moins de 248 caractères. La sélection de dossiers individuels n'est pas une option pour moi, car je ne me souviens pas de tous les répertoires de fichiers que j'ai modifiés. Une idée?
kraftwer1

2
Fonctionne parfaitement dans la mise à jour 3 de VS 2015, merci beaucoup.
Cela

35

Cela a fonctionné pour moi, en utilisant les outils électriques TFS:

tfpt online /adds /deletes /diff /noprompt /recursive directory-name

(où nom-répertoire est le chemin d'accès au répertoire à mettre à jour, sinon il détectera les changements dans tout votre référentiel TFS)

Si vous voulez savoir ce qu'il ferait sans qu'il n'apporte de modifications, vous pouvez le forcer à effectuer un essai à vide en ajoutant le /previewcommutateur.


Merci pour le conseil @Adam Batkin. A travaillé comme un charme et je suis maintenant réparé! +1
iOnline247

9
Attention, cette ligne de commande inclura également les fichiers indésirables: * .user, BIN \, obj, etc ...
Steve B

1
Merci, je cherchais un moyen de ligne de commande pour pouvoir automatiser la mise à jour du TFS de l'entreprise à partir de mon dépôt Git local!
Mark K Cowan

2
@SteveB il y a un /exclude:fld_name/*,filenamecommutateur qui peut être utilisé pour exclure les fichiers indésirables .. qui m'a beaucoup
coupé

1
Je cours comme ça tfpt online /deletes /noprompt /recursive directory-nameet j'ai mille fichiers à «changer», donc je dois annuler. Mais je n'ai jamais touché à ces derniers, juste un dossier supprimé.
Dzmitry Lahoda

16
*1- make changes outside of Visual Studio
2- go to Visual Studio and open Source Control Explorer
3- right click on the folder > "Check Out for Edit" > "Check Out"
4- right click on the same folder > "Undo Pending Changes..." > "Undo changes" > "No to All"*

J'ai testé cette solution de contournement sur une branche et cela m'a beaucoup aidé. Mais il n'y a que de nouveaux fichiers et un nouveau dossier qui doivent être faits manuellement.

Je recommande de créer une branche avant l'opération. Il vous isole le temps de l'opération.

Remarque: Cette technique effectue également le nettoyage identique des fichiers que TFS marque toujours comme modifié.


3
Cela devrait vraiment être un commentaire sur le post d ' algue , pas une nouvelle réponse. Dans tous les cas, je recommanderais toujours de ne pas faire cela pour la même raison que je l'ai déconseillé lorsque l'algue l'a suggéré ci-dessus.
Edward Thomson

Tout à fait génial! Exactement ce que je cherchais (après que notre société ait déplacé notre serveur TFS et que TFS / VS2010 en ait été dérouté). Maintenant, je viens de récupérer mes fichiers modifiés. Merci!
Mike Gledhill

Cela fonctionne, mais MS devrait fournir de meilleurs moyens de le faire. La ligne de commande et les hacks ne devraient pas être nécessaires sur un bon produit (surtout s'il est intégré dans VS). SVN et Mercurial font cela pour le plaisir ...
user2173353

Au lieu du point 4, vous pouvez utiliser tfpt uu stackoverflow.com/a/544285/10245
Tim Abell

Cela annule simplement ce que vous avez fait. Cela ne rend pas Visual Studio conscient de ce que vous avez fait.
Kyle Delaney

7

Essaye ça. C'est une sorte de solution de contournement, mais cela fonctionne:

  1. apporter des modifications en dehors de Visual Studio
  2. allez dans Visual Studio et ouvrez l'explorateur de contrôle de code source
  3. faites un clic droit sur le dossier> "Check Out for Edit" > "Check Out"
  4. clic droit sur le même dossier> "Annuler les modifications en attente ..." > "Annuler les modifications" > " Non à tous "

C'est tout. Les changements sont visibles maintenant.


3
Je recommande vraiment de ne pas cela - ma plus grande inquiétude serait que je doigte celui-ci et que j'annule accidentellement tous mes changements légitimes. De plus, vous vérifiez tous les fichiers qui, en fonction de la configuration de votre client et de votre serveur, verrouillent probablement certains ou tous les fichiers possibles et pourraient faire une mise à jour au moment du départ, ce qui pourrait certainement être ennuyeux.
Edward Thomson

1
Cela annule simplement ce que vous avez fait. Cela ne rend pas Visual Studio conscient de ce que vous avez fait.
Kyle Delaney

Et si vous avez créé ou ajouté de nouveaux éléments, dans cette session: Allé bébé, parti!
Christian

4

Il existe également une autre solution pour que TFS détecte les fichiers qui ont changé en dehors de Visual Studio:

  1. Ouvrez la solution hors ligne
  2. Dans l'Explorateur de solutions, sélectionnez le fichier de solution, puis appuyez sur le bouton Aller en ligne ( Icône du bouton GoOnline)

TFS analysera automatiquement la solution pour les modifications après cela.

La première étape peut être réalisée de différentes manières. Voilà quelque:

  • Utilisez le GoOffline extension - très simple et efficace.
  • Si des informations d'identification TFS vous sont demandées lors de l'ouverture de la solution (pas d'authentification de domaine automatique), n'entrez pas les informations d'identification. La solution s'ouvrira hors ligne et vous vous connecterez après avoir appuyé sur le bouton Aller en ligne
  • (solution extrême) Débranchez votre câble réseau; Ouvrez la solution; Connectez le câble réseau.

3

Visual Sourcesafe fonctionne également comme ceci et la façon dont j'obtiens VSS ou TFS pour remarquer le changement consiste à extraire le fichier une fois dans Visual Studio.


1

Ouvrez Contrôle de la source et accédez à votre dossier TFS. Cliquez avec le bouton droit sur le dossier et choisissez «Comparer».

Notez que vos fichiers modifiés apparaissent marqués en rouge.

Je trouve que c'est mieux que tfpt onlinece qui vous donne également des fichiers qui ne sont pas en lecture seule et non modifiés.


1

J'ai eu ce problème dans le passé, lorsque mon Internet était en panne et que je travaillais hors ligne, et la plupart de mes modifications n'apparaissaient pas dans Team Explorer.

En suivant ces étapes: Tout d' abord, Dans l'explorateur de solution, sélectionnez le dossier que vous souhaitez re-Concilier (pour moi, il était tout mon dossier de solution), puis sélectionnez Comparer ... entrez la description de l'image ici Cliquez dans Modifier le filtre , et dans le filtre texte- boîte, vous pouvez taper:

*.cs;!obj\;!bin\;!packages\;

Dans cet exemple, il n'inclura dans la recherche que les fichiers C # et exclura dans les dossiers: bin, obj et packages.

Remarquez que la colonne En attente de modification contient les informations indiquant si le fichier est marqué comme modification, ajout, etc. ou rien ...

  • Pour marquer comme modification (lorsque l'élément local a un élément de serveur correspondant), sélectionnez le fichier et choisissez Extraire pour modification ...
  • Pour marquer comme ajout (lorsque l'élément local n'a pas d'élément serveur), sélectionnez le fichier et choisissez Ajouter des fichiers

Enfin, je ne sais pas pourquoi les projets ne sont pas répertoriés ici (après avoir supprimé le filtre * .cs, ne s'affiche toujours pas), alors reconstruisez la solution pour vous assurer que les projets sont également mis à jour

+ Dans la solution, cliquez sur le bouton de connexion (s'il apparaît) qui indique Go Online .


0

J'ai trouvé que dans Visual Studio 2015, avec le projet ouvert, Visual Studio a découvert par lui-même que les fichiers avaient été modifiés en externe et les a automatiquement extraits sans que je n'ai rien à faire. L'archivage du projet de manière normale a enregistré les modifications externes.


0

Dans mon cas, ce qui suit a fonctionné (au moins la seule fois que je l'ai essayé):

  1. Accédez au panneau Modifications en attente
  2. Sélectionnez Options d'affichage sous Modifications incluses ou exclues.
  3. Basculer entre Afficher tout et Afficher les modifications de solution
  4. Revenez si vous le souhaitez

Actualiser les modifications TFS

La modification de l'option d'affichage semble forcer une actualisation des fichiers modifiés.

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.