web-dev-qa-db-fra.com

Pourquoi TFS n'obtient-il pas la dernière?

Pourquoi POURQUOI TFS n'obtient-il pas les derniers travaux de manière cohérente?

Vous auriez pensé que cette fonctionnalité aurait été testée à fond.

Ce que je dois faire est d’obtenir une version spécifique, puis cochez les deux fichiers écrasés et écrasables.

Ma configuration locale est-elle gâchée ou faites-vous cela aussi?

168
Blankman

TFS a redéfini ce que "Get Latest" fait. En termes de TFS, Get Latest signifie obtenir la dernière version des fichiers, mais ignorez ceux que le serveur pense être déjà dans votre espace de travail. Ce qui pour moi et à peu près tout le monde sur la planète est faux.

Voir ce lien: http://blogs.Microsoft.co.il/blogs/srlteam/archive/2009/04/13/how-get-latest-version-really-works.aspx

La seule façon de le faire faire est d’obtenir une version spécifique, puis cochez les deux cases «Remplacer».

113
NotMe

Parfois, Get specific version même en cochant les deux cases à cocher ne vous obtiendrez pas le dernier fichier. Vous avez probablement modifié un fichier et souhaitez annuler ces modifications en récupérant la version la plus récente. Eh bien ... c'est ce que Undo pending changes est pour et pas le but de Get specific version.

En cas de doute:

  • annuler l'enregistrement en attente sur le (s) fichier (s) 
  • faites ensuite une comparaison pour vous assurer que votre fichier correspond à la version attendue
  • lancez ensuite une "comparaison" récursive sur l'ensemble de votre projet pour voir ce qui est différent
  • gardez un œil sur la fenêtre des modifications en attente et vous devrez peut-être parfois cocher «prendre la version du serveur» pour résoudre une modification en attente incompatible.

Et celui-ci est mon préféré que je viens de découvrir: 

  • gardez un œil sur la fenêtre Output pour des messages tels que celui-ci:

    Avertissement - Impossible d'actualiser R:\TFS-PROJECTS\www.example.com\ExampleMVC\Example MVC\Example MVC.csproj car une modification est en attente.

Ce message critique apparaît dans la fenêtre de sortie. Aucune autre notification! Rien dans les modifications en attente et aucun autre message de dialogue vous indiquant que le fichier que vous venez de demander explicitement n'a pas été récupéré! Et oui - vous résolvez cela en exécutant simplement Undo pending changes et en récupérant le fichier.

39
Simon_Weaver

TFS, comme certains autres fournisseurs de contrôle de code source, tels que Perforce, procède ainsi, car le système sait quelle est la dernière version que vous avez obtenue. Si vous respectez les règles et vérifiez les choses avant de les éditer, vous ne confondez pas les choses et "obtenez les dernières nouvelles" font vraiment comme il est dit.

Comme vous l'avez vu, vous pouvez le forcer à réévaluer tout ce qui consomme beaucoup plus de bande passante, mais se rapproche de celui de SourceSafe.

12
Rowland Shaw

Il est difficile de répondre à une déclaration sans des exemples montrant comment cela ne fonctionne pas, mais il est essentiel de comprendre que TFVC (en mode "Server Workspace", qui était le mécanisme antérieur à TFS 2012) n'examine pas l'état de votre système de fichiers local Les espaces de travail du serveur TFVC sont un type de système "checkout-edit-checkin", dans lequel il s’agit d’une conception indirecte, une décision intentionnelle prise pour réduire massivement le nombre d’E/S de fichier requises pour déterminer l’état de votre espace de travail. Au lieu de cela, les informations de l'espace de travail sont enregistrées sur le serveur.

Cela permet aux espaces de travail du serveur TFVC de s’adapter très efficacement à très grandes bases de code volumineuses. Si vous vous trouvez dans une base de code de plusieurs gigaoctets (telle que Visual Studio ou l’arborescence source Windows), votre client n’a pas besoin d’analyser votre système de fichiers local, à la recherche de fichiers éventuellement modifiés, car le contrat que vous avez avec TFS vous permet de: vérifiera explicitement un fichier lorsque vous souhaitez le modifier.

Vous êtes censé ne pas marquer comme un fichier en écriture seule et le modifier sans le vérifier explicitement au préalable. Si vous suivez cette route, le serveur ne saura pas que vous avez apporté des modifications à votre fichier et effectuer l'opération "Get Latest" entraînera pas mettre à jour votre espace de travail local, car vous ne lui avez pas dit vous avez apporté des modifications.

Si vous faites subvertir ce mécanisme, vous pouvez utiliser la commande tfpt reconcile pour examiner dans votre espace de travail local les modifications que vous avez apportées localement.

Si vous utilisez "Obtenir une version spécifique" et que vous sélectionnez les options "forcer" et "écraser", il est très probable que vous ayez l'habitude de contourner toutes les applications mises en œuvre par TFS pour ne pas vous blesser. vous-même et vous devriez probablement considérer les espaces de travail locaux de TFVC.

Les espaces de travail locaux de TFVC fournissent un type de système de contrôle de version de type "édition-fusion-commit", ce qui signifie que vous n'avez pas besoin de extraire explicitement les fichiers avant de les éditer et ils ne sont pas en lecture seule sur- disque. Au lieu de cela, vous devez simplement modifier le fichier et votre client analysera le système de fichiers, remarquera le changement et le présentera comme modification en attente.

Les espaces de travail locaux TFVC sont recommandés pour les petits projets ne nécessitant pas de contrôle des autorisations détaillé, car ils présentent un flux de travail beaucoup plus agréable. Vous n'êtes pas obligé d'être en ligne et vous n'avez pas à extraire explicitement les fichiers avant de les éditer.

Les espaces de travail locaux TFVC sont les espaces par défaut dans TFS 2012, et s'ils ne sont pas activés pour vous, vous devez contacter votre administrateur de serveur. (Les organisations avec des bases de code très volumineuses ou des exigences d'audit strictes peuvent désactiver les espaces de travail locaux de TFVC.)

L'excellent livre d'Eric Sink Version Control By Example souligne les différences entre les systèmes checkout-edit-checkin et edit-merge-commit et les cas où l'un est plus approprié que l'autre.

Le livre Professional Team Foundation Server 2013 fournit également d'excellentes informations sur les différences entre les espaces de travail serveur TFVC et les espaces de travail locaux TFVC. La documentation et les blogs MSDN fournissent également des informations détaillées:

11
Edward Thomson

Team Foundation Server (TFS) conserve la trace de sa copie locale dans un répertoire caché appelé $ TF.Quand vous publiez la "dernière version", TFS examine ce dossier et voit si j'ai la dernière copie ou non. Si tel est le cas, il ne téléchargera pas la dernière copie. Peu importe que vous ayez ou non le fichier original. En fait, vous avez peut-être supprimé l'intégralité du dossier (comme dans mon cas) et TFS ne récupérera pas la dernière copie car il ne consulte pas le fichier mais le répertoire caché dans lequel il enregistre les modifications. La faille avec cette conception est, toute chose faite en dehors du système ne sera pas enregistrée dans TFS. Par exemple, vous pouvez accéder à l'Explorateur Windows, supprimer un dossier ou un fichier et TFS ne le reconnaîtra pas. Ce sera totalement aveugle. Au moins, je m'attendrais à ce que Windows ne vous laisse pas supprimer ce fichier mais c'est le cas!

Une façon d'appliquer la dernière copie consiste à supprimer manuellement le dossier masqué $ TF. Pour ce faire, accédez à l'invite de commande et accédez au dossier racine où votre projet a été extrait, puis lancez cette commande.

rd/s $tf                    // remove $TF folder and everything inside it

Si vous voulez simplement vérifier le dossier caché, vous pouvez le faire en utilisant

dir /ah                    // display hidden files and folders

Remarque: Si vous le faites, le pF pensera que vous n’avez pas de copie locale alors que vous l’avez en fichiers et il synchronisera à nouveau tout.

Attention, utilisez cette méthode à vos risques et périls. S'il vous plaît ne l'utilisez pas sur un travail critique.

6
Hammad Khan

Malheureusement, il doit y avoir un ou plusieurs bogues dans TFS 2008, car ce problème survient régulièrement sur les ordinateurs des développeurs et crée des serveurs sur lesquels je travaille également.

Je peux faire Get Latest, je peux voir dans l’historique du projet qu’il ya eu des validations après avoir effectué une dernière Get Get, je n’ai aucunement touché les fichiers sur le disque, mais après que la fonction "Get Latest" a terminé, lorsque je vérifie l'onglet TFS, certains fichiers indiquent toujours qu'ils ne sont pas la version la plus récente.

De toute évidence, TFS est en mesure de déterminer que j’ai d’anciens fichiers localement, car la liste le dit. Pourtant, Get Latest ne parvient pas à faire cela, obtenez la dernière version. Si je fais ce que vous avez fait, utilisez la version Obtenir une version spécifique et cochez les deux cases au bas de la boîte de dialogue pour que les fichiers soient récupérés.

Nous avons modifié nos serveurs de génération pour qu'ils utilisent toujours le type de fonction Obtenir une version spécifique. Cette partie fonctionne donc maintenant, mais depuis notre serveur de génération (TeamCity) repose également sur la vérification de la présence de modifications dans les fichiers afin de lancer une génération. , parfois, il tombe dans un mode "rien ne change, il n'y a rien à voir ici, ça bouge" et ne fait rien jusqu'à ce que nous exécutions de force la configuration de construction.

Notez que j'ai rencontré ce problème sur une machine qui n'a jamais été touchée, à l'exception de get latest + build, les deux manuellement, pour qu'il n'y ait aucune altération des fichiers. C'est juste que TFS s'embrouille.

Une fois que cela s'est présenté, j'ai vérifié que les fichiers sur le disque étaient bien binaires identiques à la version précédemment récupérée, de sorte qu'aucune falsification manuelle n'avait été effectuée avec les fichiers.

En outre, je ne vois pas comment TFS peut "savoir" si les fichiers ont été modifiés sur le disque ou non sans en avoir réellement examiné le contenu. Si une partie de TFS peut voir que les fichiers ne sont en effet pas la version la plus récente, la version Get Latest doit absolument pouvoir obtenir la version la plus récente. Ceci en référence aux commentaires d'autres réponses ici.

Cela peut être dû au fait que vous vous connectez à TFS en tant que même utilisateur et que le nom de l’espace de travail (basé sur le nom de la machine par défaut) est également le même. TFS pense donc que vous êtes sur la même machine et dans le même espace de travail. les fichiers, donc il ne les aura pas pour vous.

essayez de renommer votre ordinateur et de créer un nouvel espace de travail en tant que nouvel ordinateur.

3
WalkingCat

La chose la plus stupide que je vois est que "Get Latest Version" ne fait rien même lorsque le fichier local a été supprimé pour une raison quelconque. J'aurais pensé que vérifier que le fichier local existe au moins était une chose assez évidente à faire. Mais pourquoi ne pas simplement comparer l’horodatage de chaque fichier sur le serveur avec la dernière fois que vous avez effectué une opération get (qui peut être stockée quelque part localement) me laisse perplexe.

3
Dylan Nicholson

"Obtenir la dernière version" ne téléchargera par défaut que les fichiers modifiés sur le serveur depuis la dernière fois que vous avez exécuté "Obtenir la dernière version". TFS garde une trace des fichiers que vous téléchargez afin de ne pas perdre de temps à télécharger à nouveau la même version des fichiers. Si vous modifiez les fichiers en dehors de Visual Studio, cela peut entraîner des problèmes de cohérence, ce qui semble être le cas.

3
David

J'avais le même problème avec Visual Studio 2012. Quoi que je fasse, le code ne provient pas du contrôle de code source TFS.

Dans mon cas, la cause en était la correspondance entre un dossier et un sous-dossier du contrôle de code source mais vers le même arbre de mon disque dur local.

La solution consistait à supprimer le mappage de sous-dossiers à l'aide de la fenêtre "Gérer les espaces de travail".

2
Nir

Cela peut arriver lorsque vous utilisez TFS à partir de deux ordinateurs différents avec le même compte, si vous devez comparer pour voir les fichiers modifiés et les extraire, puis les obtenir en dernier, puis annuler les modifications en attente pour supprimer l'extraction. 

1
Mohamed Badr

Cela a fonctionné pour moi: 
1. Quitter Visual Studio
2. Ouvrez une fenêtre de commande et accédez au dossier: "% localappdata%\Local\Microsoft\Team Foundation \"
3. Accédez aux sous-dossiers pour chaque version et supprimez le sous-dossier "cache" et son contenu.
4. Redémarrez Visual Studio et connectez-vous à TFS.
5. Testez la dernière version.

1
Ludwo

Lorsque je rencontre ce problème, car il n’obtient pas les mises à jour les plus récentes et les différences de version, je fais d’abord un "Obtenir une version spécifique", définissez-le sur changeset et mettez-le en 1. Cela supprimera tous les fichiers de votre espace de travail local fichier, etc) et il aura également une mise à jour TFS pour qu’il sache que vous n’a maintenant PAS DE VERSION TÉLÉCHARGÉE. Vous pouvez ensuite faire un "Get Latest" et alto, vous aurez réellement la dernière

1
mjlarezzo

La plupart des problèmes que j'ai rencontrés avec les développeurs qui se plaignaient que Get Latest ne répondaient pas à leurs attentes provenaient du fait qu'ils effectuaient une Get Latest à partir de l'Explorateur de solutions plutôt que de l'Explorateur de contrôle de code source. Solution Explorer ne récupère que les fichiers qui font partie de la solution et ignore tout ce qui peut être requis par les fichiers de la solution, et donc du contrôle de source, alors que Source Control Explorer compare votre espace de travail local au référentiel sur le serveur pour déterminer quels fichiers sont nécessaires.

1
levelnis

je veux juste ajouter TFS MSBuild ne prend pas en charge les caractères spéciaux sur les dossiers, par exemple "@"

j'avais connu dans le passé un de nos dossiers de projet nommé External @ Project1

nous avons créé une définition de construction TFS pour exécuter un fichier msbuild personnalisé, puis le dossier de l'espace de travail ne reçoit aucun contenu du dossier External @ Project1 au cours de sa dernière mise à jour. Il semble que tfs get échoue mais ne montre aucune erreur.

après quelques essais et erreurs et en renommant le dossier en _Project1. voila nous avons des fichiers sur le dossier (_Project1).

0
bherto39

Outil:TFS Power Tools

Source:http://dennymichael.net/2013/03/19/tfs-scorch/

Commande: Tfpt scorch/récursive/supprime C:\LocationOfWorkspaceOrFolder

Cela fera apparaître une boîte de dialogue qui vous demandera de supprimer ou de télécharger une liste de fichiers. Sélectionnez ou désélectionnez les fichiers en conséquence et appuyez sur ok. Apparence dans la grille (CheckBox, FileName, FileAction, FilePath)

Cause: TFS comparera uniquement les éléments de l'espace de travail. Si des modifications ont été apportées en dehors de l'espace de travail, TFS n'en aura pas connaissance. 

Espérons que quelqu'un trouve cela utile. J'ai trouvé ce post après avoir supprimé une poignée de dossiers dans divers emplacements. Ne pas me souvenir des dossiers que j'ai supprimés excluait l'option habituelle Forcer l'extraction/remplacement que j'aurais utilisée. 

0
Nick

Dans mon cas, obtenir une version spécifique, même en cochant les deux cases et en annulant toutes les modifications en attente ne fonctionnait pas.

Vérifié les espaces de travail. Modifier l'espace de travail actuel. Vérifier tous les chemins .. Le chemin de la solution était incorrect et pointait vers un dossier supprimé.

Correction du chemin et obtenir le dernier travail a bien fonctionné.

0
Himanshu Patel