为什么TFS最新获得最新版本?

Bla*_*man 173 tfs getlatest

为什么为什么TFS不能始终如一地获得最新的工作?

您可能会认为该功能已经过彻底测试.

我要做的是,获取特定版本,然后检查覆盖可写文件+覆盖所有文件.

我的本地设置是搞砸了还是你这样做了?

Not*_*tMe 117

TFS重新定义了"Get Latest"的功能.在TFS术语中,获取最新版本意味着获取文件的最新版本,但忽略服务器认为已在您的工作区中的文件.对我而言,这对地球上的其他人来说都是错误的.

请看这个链接:http://blogs.microsoft.co.il/blogs/srlteam/archive/2009/04/13/how-get-latest-version-really-works.aspx

让它做你想做的唯一方法是获取特定版本,然后检查两个"覆盖..."框.

  • @Robaticus tfs如何'最新'广告真的.正如克里斯热烈的说过,他和地球上的每个人都明白"得到最新"得到的最新版本不是tfs会做的.你没有必要在tfs之外编辑源代码来搞砸它.我有2个工作站,可互换工作,我只是无法获得源同步.获得最新版本已经是tfs的麻烦,我无法想象合并想要什么. (16认同)
  • 啊! 这是一种痛苦.Visual Studio很容易搞砸,有时将其修复到文件系统是最简单的方法.其他源代码控制系统(如Subversion)具有Windows资源管理器挂钩,并且VS集成可以更好地监控更改.我想念SVN! (11认同)
  • 这是不正确的.只要TFS知道文件的更改,TFS"获取最新"的工作方式与广告完全相同.当人们外出并修改IDE外部的文件而不先检查它们时,获取最新的"搞砸".然后,TFS认为你有最新的磁盘源,但没有得到它. (7认同)
  • 我同意作者的观点。我将“获取最新版本”读作“从服务器获取最新版本”(我还能从哪里获取它?)。在 VS2010 中,我做了获取最新版本并告诉我有最新版本,但是如果我进行比较,它会列出本地和最新服务器版本之间的差异。我同意它不会覆盖本地工作,但它至少应该做一个时间戳比较,而不是用“你有最新版本”来误导我。当我删除本地版本时,获取最新版本按预期工作。 (3认同)
  • @publicENEMY,我曾经在两台机器上使用tfs,确实是源同步问题.你可能需要两个tfs用户... (2认同)

Sim*_*ver 41

有时Get specific version 甚至检查两个复选框都不会得到最新的文件.您可能已对文件进行了更改,并希望通过重新获取最新版本来撤消这些更改.嗯......这Undo pending changes是为了什么,而不是为了什么目的Get specific version.

如果有疑虑:

  • 撤消挂起的文件检入
  • 之后进行比较以确保您的文件与预期版本匹配
  • 之后对整个项目进行递归"比较",看看还有什么不同
  • 密切关注挂起的更改窗口,有时您可能需要检查"服务器版本"以解决不兼容的挂起更改

这是我刚发现的最喜欢的:

  • 请留意Output窗口中的消息,例如:

    警告 - 无法刷新R:\ TFS-PROJECTS\www.example.com\ExampleMVC \示例MVC \示例MVC.csproj,因为您有待处理的编辑.

关键消息显示在输出窗口中.没有其他通知!挂起的更改中没有任何内容,也没有其他对话框消息告诉您明确请求的文件未被检索!是的 - 您只需运行Undo pending changes并获取文件即可解决此问题.


Row*_*haw 12

与其他一些源控制提供程序(如Perforce)一样,TFS执行此操作,因为系统知道您成功获得的最新版本是什么,因此最新变为"从x获取更改".如果您按照规则进行游戏并在编辑之前实际检查出来,那么您就不会混淆事情,而"获得最新"的确如此.

正如您所见,您可以强制它重新评估所有具有更大带宽使用率的东西,但其行为更接近SourceSafe的使用方式.


Edw*_*son 11

没有关于它如何工作的例子很难回应一个声明,但是理解TFVC(在"服务器工作空间"模式下,这是TFS 2012之前的机制)并不检查本地文件系统的状态是至关重要的.TFVC服务器工作空间是一种"checkout-edit-checkin"类型的系统,这是一种设计,是一种有意识的决定,可以大量减少确定工作空间状态所需的文件I/O量.而是将工作空间信息保存在服务器上.

这使TFVC服务器工作区可以非常有效地扩展到非常大的代码库.如果您使用的是几千兆字节的代码库(如Visual Studio或Windows源代码树),那么您的客户端无需扫描您的本地文件系统,查找可能已更改的文件,因为您与TFS签订的合同就是您当您要编辑文件时,将明确检出文件.

您预计不会文件标记为只写和改变它没有明确地先检查出来.如果你沿着这条路走下去,那么服务器不知道你对你的文件进行了更改,并且执行"获取最新"操作将不会更新你的本地工作区,因为你没有告诉服务器你做了什么变化.

如果您确实破坏了此机制,则可以使用该tfpt reconcile命令检查本地工作区以查找您在本地进行的更改.

如果您发现自己使用"获取特定版本"并选择"强制"和"覆盖"选项,那么您很可能会绕过TFS实施的所有强制措施,以免您伤害自己,你应该考虑TFVC本地工作空间.

TFVC本地工作区提供一个"编辑-合并-提交"类型的版本控制系统,这意味着您的并不需要编辑它们之前明确地签出文件,他们不是只读磁盘上.相反,您只需编辑该文件,您的客户端将扫描文件系统,注意更改,并将其显示为挂起的更改.

TFVC本地工作区建议用于不需要细粒度权限控制的小项目,因为它们提供了更好的工作流程.您不需要在线,也不必在编辑之前明确检查文件.

TFVC本地工作区是TFS 2012中的默认设置,如果没有为您启用,那么您应该询问您的服务器管理员.(具有非常大的代码库或严格的审计要求的组织可能会禁用TFVC本地工作区.)

Eric Sink的优秀书籍Version Control by Example概述了checkout-edit-checkin和edit-merge-commit系统之间的差异,以及何时比另一个更合适.

专业的Team Foundation Server 2013本书还提供了有关TFVC服务器工作空间和TFVC本地工作区之间的差异优秀的信息.MSDN文档和博客还提供了详细信息:


Ham*_*han 6

Team Foundation Server(TFS)在名为$ TF的隐藏目录中跟踪其本地副本.当您发出"获取最新版本"时,TFS会查看此文件夹并查看天气我是否拥有最新副本.如果是这样,它将不会下载最新的副本.如果您有原始文件并不重要.实际上你可能已经删除了整个文件夹(就像我的情况一样)而且TFS不会获取最新的副本,因为它不会查看实际文件,而是查看记录更改的隐藏目录.这种设计的缺陷是,在系统外完成的任何事情都不会记录在TFS中.例如,您可能会进入Windows资源管理器,删除文件夹或文件,TFS不会识别它.这将是完全失明的.至少我希望Windows不会让你删除这个文件,但确实如此!

强制执行最新副本的一种方法是手动删除隐藏的$ TF文件夹.为此,请转到命令提示符并导航到签出项目的根文件夹并发出此命令

rd/s $tf                    // remove $TF folder and everything inside it
Run Code Online (Sandbox Code Playgroud)

如果您只想检查隐藏文件夹,可以使用

dir /ah                    // display hidden files and folders
Run Code Online (Sandbox Code Playgroud)

注意:如果你这样做,tf会认为你没有任何本地副本,即使你在文件中有它,它会再次同步所有内容.

注意:使用此方法需要您自担风险.请不要在重要工作中使用它.