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

时间:2010-06-29 14:16:51

标签: tfs getlatest

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

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

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

我的本​​地设置是否搞砸了,或者你也这样做了?

19 个答案:

答案 0 :(得分:116)

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

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

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

答案 1 :(得分:41)

有时Get specific version 即使同时选中这两个复选框也无法获取最新文件。您可能已对文件进行了更改,并希望通过重新获取最新版本来撤消这些更改。嗯......这就是Undo pending changes的用途,而不是Get specific version的目的。

如有疑问:

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

这是我刚才发现的最爱:

  • 留意Output窗口中的消息:

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

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

答案 2 :(得分:12)

与其他一些源控制提供程序(如Perforce)一样,TFS执行此操作,因为系统知道您成功获取的最新版本是什么,因此最新变为“从x获取更改”。如果你按照规则进行游戏并在编辑之前先检查一下,你就不要把事情搞得一团糟,而且“得到最新”的确如此。

正如您所见,您可以强制它重新评估所有带宽使用率更高的内容,但其行为更接近SourceSafe的使用方式。

答案 3 :(得分: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系统之间的差异,以及哪一个比另一个更合适。

Professional Team Foundation Server 2013一书还提供了有关TFVC服务器工作区和TFVC本地工作区之间差异的绝佳信息。 MSDN文档和博客还提供了详细信息:

答案 4 :(得分:6)

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

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

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

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

执行此操作
dir /ah                    // display hidden files and folders

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

警告:使用此方法需要您自担风险。请不要在重要工作中使用它。

答案 5 :(得分:3)

默认情况下,“获取最新版本”只会下载自上次运行“获取最新版本”以来服务器上已更改的文件。 TFS会跟踪您下载的文件,因此不会花时间再次下载相同版本的文件。如果要修改Visual Studio之外的文件,这可能会导致听起来像您看到的一致性问题。

答案 6 :(得分:3)

不幸的是,TFS 2008中必定存在一个或多个错误,因为这个问题经常出现在开发人员计算机上,并构建我工作的服务器。

我可以做最新的,我可以在项目的历史列表中看到,在我上次做了最新动态之后有提交,我没有以任何方式触摸磁盘上的文件,但在“获取最新信息”之后“功能已经完成,当我查看TFS选项卡时,一些文件仍然说它们不是最新版本。

显然,TFS能够确定我本地有旧文件,因为列表是这样说的。然而,Get Latest无法做到这一点,获得最新版本。如果我按照您的方式执行操作,请使用Get Specific版本,并选中对话框底部的两个复选框,然后检索文件。

我们将构建服务器更改为始终使用Get Specific版本类型的函数,因此这部分现在可以工作,但是因为我们的构建服务器(TeamCity)还依赖于检查文件是否有更改以便踢关闭一个构建,有时它会变成“没有改变,没有什么可看到的,移动”模式,并且在我们强制运行构建配置之前什么都不做。

请注意,我在一台永远不会被触及的机器上遇到过这个问题,除了手动获取最新的+版本,因此没有任何篡改文件。这只是TFS感到困惑。

有一次,我确认磁盘上的文件确实与先前检索的版本完全相同,因此没有对文件进行手动篡改。

另外,我没有看到TFS如何在不实际查看内容的情况下“知道”磁盘上的文件是否已更改。如果TFS的一部分可以看到文件确实不是最新版本,那么获取最新版本应该绝对能够获得最新版本。这是对其他答案的评论。

答案 7 :(得分:3)

可能是因为您以相同的用户身份登录TFS,并且工作区名称(默认情况下基于计算机名称)也是相同的,因此TFS认为您位于同一台计算机和相同的工作区,因此您已经拥有最新版本的文件,所以它不适合你。

尝试重命名您的计算机,并将新工作区创建为新计算机。

答案 8 :(得分:3)

我看到的最愚蠢的事情是,即使本地文件因任何原因被删除,“获取最新版本”也不会执行任何操作。我会想到检查本地文件至少存在是一个非常明显的事情。但是为什么它不能只是比较服务器上每个文件的时间戳和你上次获取的时间(可能存储在本地的某个地方)让我感到困惑。

答案 9 :(得分:2)

我在Visual Studio 2012中遇到了同样的问题。无论我做了什么,它都没有从TFS源代码控制中获取代码。

在我的情况下,原因是将源控件中的文件夹+子文件夹分别映射到本地HD中的同一棵树。

解决方案是使用“管理工作区”窗口删除子文件夹映射。

答案 10 :(得分:1)

当我遇到这个问题时,它没有得到最新版本和版本不匹配我首先做一个“获取特定版本”将其设置为changeset并输入1.这将删除本地工作区中的所有文件(对于该项目,文件夹,文件等),它也将有TFS更新,以便它知道你现在没有下载任何版本。然后你可以做一个“获取最新”和中提琴,你将拥有最新的

答案 11 :(得分:1)

这对我有用:
1.退出Visual Studio
2.打开命令窗口并导航到文件夹:"%localappdata%\ Local \ Microsoft \ Team Foundation \"
3.导航到每个版本的子文件夹,然后删除子文件夹" cache"及其内容
4.重新启动Visual Studio并连接到TFS 5.测试获取最新版本。

答案 12 :(得分:1)

当您使用具有相同帐户的两台不同计算机上的TFS时可能会发生这种情况,如果是这样,您应该进行比较以查看已更改的文件并查看它们然后获取最新版本然后撤消待处理更改以删除结帐

答案 13 :(得分:1)

我与开发人员一起看到的大多数问题都抱怨Get Max没有做到他们所期望的事情源于他们从解决方案资源管理器而不是源代码管理资源管理器中执行Get Latest。解决方案资源管理器仅获取作为解决方案一部分的文件并忽略解决方案中文件可能需要的任何内容,因此忽略源控件的一部分,而源代码管理浏览器将本地工作空间与服务器上的存储库进行比较以确定哪些文件需要。

答案 14 :(得分:0)

只想添加TFS MSBuild不支持文件夹上的特殊字符,即“@”

我过去曾经历过一个名为External @ Project1

的项目文件夹

我们创建了一个TFS Build定义来运行自定义的msbuild文件,然后工作区文件夹在工作区获取最新版本时没有在External @ Project1文件夹中获取任何内容。似乎tfs get失败但没有显示任何错误。

经过一些试验和错误并将文件夹重命名为_Project1。我们在文件夹上有文件(_Project1)。

答案 15 :(得分:0)

<强>工具: TFS Power Tools

<强>来源: http://dennymichael.net/2013/03/19/tfs-scorch/

<强>命令: tfpt scorch / recursive / deletes C:\ LocationOfWorkspaceOrFolder

这将弹出一个对话框,要求您删除或下载文件列表。选择或取消选择相应的文件,然后按确定。网格中的外观(CheckBox,FileName,FileAction,FilePath)

<强>原因: TFS只会与工作区中的项目进行比较。如果在工作空间之外进行了更改,TFS将不会意识到它们。

希望有人觉得这很有用。删除了不同位置的少量文件夹后,我发现了这篇文章。不记得我删除了哪些文件夹排除了我会使用的常用强制获取/替换选项。

答案 16 :(得分:0)

就我而言,获取特定版本,即使同时选中两个复选框并撤消所有未完成的更改也不起作用。

检查工作空间。编辑当前工作空间。检查所有路径。 解决方案路径不正确,并指向已删除的文件夹。

修复路径并获得最新效果。

答案 17 :(得分:0)

右键单击:高级>获取特定版本。选择“最新版本”,现在,重要的是,选中两项检查: enter image description here

检查是:
覆盖未选中的可写文件

覆盖所有文件,即使本地版本与指定版本匹配

答案 18 :(得分:0)

每次(到目前为止)都发生这种情况是因为我在.csproj项目文件上有待处理的本地编辑。该文件似乎保留了项目中包含的所有文件的列表。别人添加的任何新文件都不会“下载”,因为它们不在我本地编辑(现在已过时)的项目文件中。要获取所有文件,我首先必须撤消对.csproj文件的未决更改,然后再“全部获取”。我不必撤消所做的其他更改,但是我可能不得不返回并再次包含我的新文件(然后下一个家伙尝试“全部获取”时遇到相同的问题...)

在我看来,当多个人同时添加新文件时,存在一些基本的困惑。

(这是在.Net Framework项目中,也许其他框架(如Core)的行为也不同)