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, c'est obtenir une version spécifique, puis vérifier à la fois écraser les fichiers inscriptibles + écraser tous les fichiers.
Ma configuration locale est-elle fausse ou vous faites cela aussi?
Réponses:
TFS a redéfini ce que fait «Get Latest». En termes 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 est faux pour moi et pour presque tout le monde sur la planète.
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 faire ce que vous voulez est d'obtenir une version spécifique, puis cochez les deux cases «Écraser ...».
la source
Parfois,
Get specific version
même en cochant les deux cases , vous n'obtiendrez pas le dernier fichier. Vous avez probablement apporté une modification à un fichier et souhaitez annuler ces modifications en récupérant à nouveau la dernière version. Eh bien ... c'est à cela queUndo pending changes
sert et non le butGet specific version
.En cas de doute:
Et celui-ci est mon préféré que je viens de découvrir:
gardez un œil sur la
Output
fenêtre pour les messages tels que celui-ci:Avertissement - Impossible d'actualiser R: \ TFS-PROJECTS \ www.example.com \ ExampleMVC \ Example MVC \ Example MVC.csproj car vous avez une modification 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 ce problème en exécutant simplement
Undo pending changes
et en récupérant le fichier.la source
Undo pending changes
) a fonctionné pour moi.TFS, comme certains autres fournisseurs de contrôle de source, tels que Perforce, faites cela, car le système sait quelle était la dernière version que vous avez obtenue avec succès, alors obtenez les dernières modifications en "obtenir les modifications depuis x". Si vous jouez selon ses règles et que vous vérifiez les choses avant de les éditer, vous ne confondez pas les choses, et "être au courant" fait vraiment ce qu'il dit.
Comme vous l'avez vu, vous pouvez le forcer à tout réévaluer, ce qui utilise une bande passante beaucoup plus grande, mais se comporte plus près de la façon dont SourceSafe le faisait auparavant.
la source
Il est difficile de répondre à une déclaration sans exemples de la façon dont cela ne fonctionne pas, mais il est crucial de comprendre que TFVC (en mode "Server Workspace", qui était le mécanisme avant TFS 2012) n'examine pas l'état de votre système de fichiers local . Les espaces de travail du serveur TFVC sont un système de type «extraction-édition-archivage» où il s'agit d'une décision délibérée prise pour réduire massivement la quantité d'E / S de fichier requise 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 à de très grandes bases de code. Si vous êtes dans une base de code de plusieurs gigaoctets (comme Visual Studio ou l'arborescence des sources Windows), votre client n'a pas besoin d'analyser votre système de fichiers local, à la recherche de fichiers qui peuvent avoir changé, car le contrat que vous avez avec TFS est que vous extraira explicitement un fichier lorsque vous souhaitez le modifier.
Vous êtes censé ne pas marquer un fichier comme étant en écriture seule et le modifier sans le retirer explicitement au préalable. Si vous suivez cette voie, le serveur ne sait pas que vous avez apporté des modifications à votre fichier et l'exécution d'une opération "Obtenir la dernière" ne mettra pas à jour votre espace de travail local, car vous n'avez pas informé le serveur que vous avez effectué changements.
Si vous faites subvertir ce mécanisme, vous pouvez utiliser la
tfpt reconcile
commande pour examiner votre espace de travail local pour les changements que vous avez fait sur place.Si vous vous retrouvez à utiliser "Obtenir une version spécifique" et à sélectionner les options "forcer" et "écraser", il est fort probable que vous ayez l'habitude de contourner toutes les applications mises en œuvre par TFS pour vous empêcher de vous blesser, et vous devriez probablement considérer les espaces de travail locaux TFVC.
Les espaces de travail locaux TFVC fournissent un système de contrôle de version de type «édition-fusion-validation», ce qui signifie que vous n'avez pas besoin d'extraire explicitement les fichiers avant de les éditer et qu'ils ne sont pas en lecture seule sur le disque. Au lieu de cela, vous devez simplement modifier le fichier, et votre client analysera le système de fichiers, notera le changement et le présentera comme un changement en attente.
Les espaces de travail locaux TFVC sont recommandés pour les petits projets qui ne nécessitent pas un contrôle précis des autorisations, 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 modifier.
Les espaces de travail locaux TFVC sont la valeur par défaut dans TFS 2012, et s'ils ne sont pas activés pour vous, vous devez demander à votre administrateur de serveur. (Les organisations avec de très grandes bases de code ou des exigences d'audit strictes peuvent désactiver les espaces de travail locaux TFVC.)
L'excellent livre d'Eric Sink, Version Control By Example, décrit les différences entre les systèmes checkout-edit-checkin et edit-merge-commit et quand 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 du serveur TFVC et les espaces de travail locaux TFVC. La documentation et les blogs MSDN fournissent également des informations détaillées:
la source
Team Foundation Server (TFS) garde une trace de sa copie locale dans un répertoire caché appelé $ TF. Lorsque vous émettez le "get Latest Version", TFS regarde dans ce dossier et voit la météo que 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 d'origine. En fait, vous avez peut-être supprimé le dossier entier (comme dans mon cas) et TFS ne récupérera pas la dernière copie car il ne regarde pas dans le fichier réel mais dans le répertoire caché où il enregistre les modifications. Le défaut de cette conception est que tout ce qui est fait en dehors du système ne sera pas enregistré 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 $ TF caché. Pour ce faire, accédez à l'invite de commande et accédez au dossier racine où votre projet a été extrait et exécutez cette commande
Si vous voulez simplement vérifier le dossier caché, vous pouvez le faire en utilisant
Remarque: si vous le faites, le tf pensera que vous n'avez aucune copie locale même si vous l'avez dans des fichiers et il synchronisera tout à nouveau.
Attention: utilisez cette méthode à vos propres risques. Veuillez ne pas l'utiliser sur des travaux critiques.
la source
"Obtenir la dernière version" par défaut ne téléchargera que les fichiers qui ont changé 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 les problèmes de cohérence que vous ressentez.
la source
Malheureusement, il doit y avoir un ou plusieurs bogues dans TFS 2008, car ce problème survient régulièrement sur les machines de développement et construit des serveurs sur lesquels je travaille également.
Je peux faire Get Latest, je peux voir dans la liste de l'historique du projet qu'il y a eu des commits après avoir fait un Get Latest pour la dernière fois, je n'ai pas touché les fichiers sur le disque de quelque manière que ce soit, mais après la fonction "Get Latest" a terminé, lorsque je vérifie l'onglet TFS, certains des fichiers indiquent toujours qu'ils ne sont pas la dernière version.
Évidemment, TFS est capable de déterminer que j'ai d'anciens fichiers localement, puisque la liste l'indique. Pourtant, Get Latest ne parvient pas à le faire, obtenez la dernière version. Si je fais ce que vous avez fait, utilisez la version Get Specific et cochez les deux cases à cocher en bas de la boîte de dialogue, les fichiers sont récupérés.
Nous avons changé nos serveurs de build pour toujours utiliser le type de fonction Get Specific version à la place, donc cette partie fonctionne maintenant, mais puisque notre serveur de build (TeamCity) repose également sur la vérification s'il y a eu des modifications dans les fichiers afin de lancer une build , parfois il passe en mode "rien de changé, rien à voir ici, avancez" et ne fait rien tant que nous n'exécutons pas de force la configuration de construction.
Notez que j'ai rencontré ce problème sur une machine qui n'est jamais touchée, à l'exception de get latest + build, les deux manuellement, donc il n'y a rien de falsifié dans les fichiers. C'est juste que TFS devient confus.
Une fois, j'ai vérifié que les fichiers sur le disque étaient en effet binaires identiques à la version précédemment récupérée, donc aucune falsification manuelle n'avait été faite avec les fichiers.
De plus, je ne vois pas comment TFS peut "savoir" si les fichiers ont changé sur le disque ou non sans en regarder le contenu. Si une partie de TFS peut voir que les fichiers ne sont en effet pas la dernière version, alors la dernière version devrait absolument pouvoir obtenir la dernière version. Ceci en référence aux commentaires sur d'autres réponses ici.
la source
Cela peut être dû au fait que vous vous connectez à TFS avec le 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, donc TFS pense que vous êtes sur la même machine et le même espace de travail, vous avez donc déjà la dernière version de les fichiers, donc il ne les obtiendra pas pour vous.
essayez de renommer votre machine et créez un nouvel espace de travail en tant que nouvelle machine.
la source
J'ai eu le même problème avec Visual Studio 2012. Peu importe ce que j'ai fait, il n'a pas obtenu le code du contrôle de source TFS.
Dans mon cas, la cause était le mappage d'un dossier + sous-dossier du contrôle de source séparément mais dans le même arbre dans mon disque dur local.
La solution consistait à supprimer le mappage des sous-dossiers à l'aide de la fenêtre «gérer les espaces de travail».
la source
La plupart des problèmes que j'ai rencontrés avec les développeurs se plaignant du fait que Get Latest ne fait pas ce qu'ils attendent proviennent du fait qu'ils effectuent un Get Latest à partir de l'Explorateur de solutions plutôt que de l'Explorateur de contrôle de source. L'Explorateur de solutions obtient uniquement les fichiers qui font partie de la solution et ignore tout ce qui peut être requis par les fichiers de la solution, et donc une partie du contrôle de code source, tandis que l'explorateur de contrôle de source compare votre espace de travail local avec le référentiel sur le serveur pour déterminer les fichiers sont nécessaires.
la source
Lorsque je rencontre ce problème avec qu'il n'obtient pas la dernière version et les incompatibilités de version, je commence par faire un "Get Specific Version", définissez-le sur changeset et insérez-le 1. Cela supprimera tous les fichiers de votre espace de travail local (pour ce projet, ce dossier, fichier, etc.) et il aura également une mise à jour TFS afin qu'il sache que vous n'avez maintenant AUCUNE VERSION TÉLÉCHARGÉE. Vous pouvez ensuite faire un "Get Latest" et un alto, vous aurez en fait le dernier
la source
Cela peut arriver lorsque vous utilisez TFS à partir de deux machines différentes avec le même compte, si c'est le cas, vous devez comparer pour voir les fichiers modifiés et les extraire, puis obtenir la dernière version puis annuler les modifications en attente pour supprimer l'extraction.
la source
Cela a fonctionné pour moi:
1. Quittez Visual Studio
2. Ouvrez une fenêtre de commande et accédez au dossier: "% localappdata% \ Local \ Microsoft \ Team Foundation \"
3. Naviguez vers les 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.
la source
je veux juste ajouter TFS MSBuild ne prend pas en charge les caractères spéciaux sur les dossiers, par exemple "@"
j'avais déjà expérimenté dans le passé où l'un de nos dossiers de projet nommé External @ Project1
nous avons créé une définition de build TFS pour exécuter un fichier msbuild personnalisé, le dossier de l'espace de travail n'obtient aucun contenu dans le dossier External @ Project1 pendant la dernière mise à jour de l'espace de travail. Il semble que tfs get échoue mais ne montre aucune erreur.
après quelques essais et erreurs et renommer le dossier en _Project1. voila, nous avons des fichiers sur le dossier (_Project1).
la source
Outil: Outils électriques TFS
Source: http://dennymichael.net/2013/03/19/tfs-scorch/
Commande: tfpt scorch / recursive / 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 se comparera uniquement aux é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é cet article après avoir supprimé une poignée de dossiers à différents endroits. Ne pas me souvenir des dossiers que j'ai supprimés a exclu l'option habituelle Forcer / Remplacer que j'aurais utilisée.
la source
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érifiez tous les chemins. Le chemin de la solution était incorrect et pointait vers un dossier supprimé.
Correction du chemin et la dernière a bien fonctionné.
la source
Allez avec un clic droit: Avancé> Obtenir une version spécifique . Sélectionnez "Version Letest" et maintenant, important, cochez deux vérifications:
Les vérifications sont les suivantes:
Écraser les fichiers inscriptibles qui ne sont pas vérifiés
Écraser tous les fichiers même si la version locale correspond à la version spécifiée
la source