为什么TFS不能获取最新版本?

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

你会认为这个function会被彻底的testing。

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

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

TFS重新定义了“获取最新”的function。 在TFS术语中,获取最新意味着获取最新版本的文件,但忽略服务器认为已经在工作区中的文件。 对我而言,这个星球上的其他人都是错的。

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

获得它所需要的唯一方法是获取特定版本,然后检查两个“覆盖…”框。

有时甚至检查这两个checkbox的 Get specific version不会得到你最新的文件。 您可能对文件进行了更改,并希望通过重新获取最新版本来撤销这些更改。 那么…这就是Undo pending changes是为了而不是Get specific version的目的。

如有疑问:

  • 撤消挂起签入文件(S)
  • 然后做一个比较,以确保您的文件匹配的预期版本
  • 之后在整个项目上运行recursion“比较”,看看还有什么不同
  • 留意待处理的更改窗口,有时您可能需要检查“服务器版本”以解决不兼容的挂起更改

我刚发现这是我最喜欢的

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

    警告 – 无法刷新R:\ TFS-PROJECTS \ http://www.example.com \ ExampleMVC \示例MVC \示例MVC.csproj,因为您有一个挂起的编辑。

这个重要信息出现在输出窗口中。 没有其他通知! 待处理中没有任何更改,也没有其他对话框消息告诉您刚刚请求的文件未被检索到! 是的 – 你解决这个只需运行Undo pending changes和获取文件。

像其他一些源代码pipe理提供商,比如Perforce,TFS就是这样做的,因为系统知道你最后成功的版本是什么,所以最近变成了“从x获得变化”。 如果按照规则行事,在编辑之前先把事情搞清楚,那么不要混淆视听,“最新”就是这样说的。

正如你所看到的,你可以强制它重新评估一切,它具有更大的带宽使用,但更接近SourceSafe的习惯。

如果没有例子说明它的工作方式很难回应,但是了解TFVC(在“TFS 2012”之前的“服务器工作空间”模式下) 并不检查本地文件系统的状态是至关重要的。 TFVC服务器工作区是一个“检出 – 编辑 – 签入”types的系统,这是一个有意的决定,它大量减less了确定工作区状态所需的文件I / O数量。 而是将工作区信息保存在服务器上。

这允许TFVC服务器工作区非常有效地扩展到非常大的代码库。 如果您使用的是多GB的代码库(如Visual Studio或Windows源代码树),那么您的客户端不需要扫描您的本地文件系统,查找可能已经改变的文件,因为您与TFS签订的合同就是您当你想要编辑它时,会明确地检查一个文件。

不应将文件标记为只写,并且在不明确检查出来的情况下对其进行更改。 如果沿着这条路线走,那么服务器并不知道你已经对你的文件进行了修改,而执行“Get Latest”操作不会更新你的本地工作区,因为你没有告诉服务器你已经做了变化。

如果您颠覆了这种机制,那么您可以使用tfpt reconcile命令来检查您的本地工作空间,以获取您在本地进行的更改。

如果您发现自己使用“获取特定版本”并select“强制”和“覆盖”选项,那么很可能您习惯于绕过TFS实施的所有强制措施,以防止自己受到伤害,你应该考虑TFVC本地工作区。

TFVC本地工作区提供了“编辑 – 合并 – 提交”types的版本控制系统,这意味着在编辑它们之前不需要显式检查文件,而且它们不是只读在磁盘上。 相反,只需编辑文件,客户端将扫描文件系统,注意更改,并将此作为待处理的更改提交。

build议 TFVC本地工作区用于不需要精细权限控制的小型项目,因为它们提供了更好的工作stream程。 您不需要在线,并且在编辑之前不必显式检查文件。

TFVC本地工作区是TFS 2012中的默认工具,如果它们没有启用,那么你应该询问你的服务器pipe理员。 (具有非常大的代码库或严格的审核要求的组织可能会禁用TFVC本地工作区。

Eric Sink出色的书“ Version Control by Example”概述了checkout-edit-checkin和edit-merge-commit系统之间的区别,以及何时比其他更合适。

专业团队基础服务器2013年书籍还提供了关于TFVC服务器工作区和TFVC本地工作区之间的差异的优秀信息。 MSDN文档和博客还提供了详细信息:

  • 决定使用本地还是服务器工作区
  • 服务器工作区与本地工作区
  • Team Foundation Server – 尝试了解服务器与本地工作区

团队基础服务器(TFS)跟踪其本地副本在一个名为$ TF的隐藏目录。当您发出“获取最新版本”,TFS看着这个文件夹,看看我有最新的副本天气。 如果是这样,它不会下载最新的副本。 不要紧,如果你有原始文件或没有。 事实上,你可能已经删除了整个文件夹(就像我的情况),TFS将不会获取最新的副本,因为它不会查看实际文件,而是查看logging更改的隐藏目录。 这个devise的缺陷是,任何在系统之外完成的事情都不会被logging在TFS中。 例如,您可能会进入Windows资源pipe理器,删除一个文件夹或文件,TFS不会识别它。 这将是完全失明的。 至less我会期望有Windows不会让你删除这个文件,但它!

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

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

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

 dir /ah // display hidden files and folders 

注意:如果你这样做,tf会认为你没有任何本地副本,即使你有它的文件,它会再次同步一切。

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

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

不幸的是,在TFS 2008中必须有一个或多个错误,因为这个问题在开发者机器上经常出现,并且在我的工作环境中构build服务器。

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

很明显,TFS能够确定我在本地有旧文件,因为列表是这样说的。 然而,获取最新未能做到这一点,得到最新版本。 如果我做了你所做的,使用获取特定版本,并检查对话框底部的两个checkbox,然后检索文件。

我们改变了我们的构build服务器,总是使用获取特定版本types的函数,所以这个部分现在可以工作,但是由于我们的构build服务器(TeamCity)也依靠检查文件是否有变化来启动构build,有时候会变成“没有什么变化,没有什么可看的,沿着”模式,直到我们强行运行构buildconfiguration。

请注意,我曾经遇到过这个问题,从来没有碰过的机器,除了得到最新的+构build,手动,所以没有什么篡改文件。 这只是TFS变得困惑。

有一次出现这种情况,我确认磁盘上的文件确实与先前检索的版本是二进制相同的,所以没有对这些文件进行手动篡改。

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

这可能是因为你是以同一个用户身份loginTFS,并且工作区名称(默认情况下是基于机器名称)也是相同的,所以TFS认为你在同一台机器和同一个工作区上,因此你已经有了最新版本这些文件,所以它不会让你的。

尝试重命名您的机器,并创build一个新的工作区作为一台新机器。

我有与Visual Studio 2012相同的问题。无论我做了什么,它没有从TFS源代码pipe理得到的代码。

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

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

我看到的最愚蠢的事情是“获取最新版本”甚至在本地文件因任何原因被删除时也不做任何事情。 我会想,检查至less存在的本地文件是一个相当明显的事情要做。 但是,为什么它不能只比较服务器上每个文件的时间戳和你上次获得的时间戳(可以存储在本地的某个地方)使我困惑。

与开发人员抱怨,“获取最新”的大多数问题都不符合他们的期望,因为他们正在从解决scheme资源pipe理器执行获取最新dynamic,而不是源代码pipe理资源pipe理器。 解决scheme资源pipe理器仅获取解决scheme中的文件,并忽略解决scheme中的文件可能需要的任何内容,因此是源代码pipe理的一部分,而源代码pipe理浏览器将您的本地工作空间与服务器上的存储库进行比较,以确定哪些文件是需要的。

当你从两台具有相同帐户的不同机器上使用TFS时,可能会发生这种情况,如果是这样的话,你应该比较一下,看看是否有更改的文件,然后检查它们,然后获取最新的信息,

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

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

我曾经经历过一个名为External @ Project1的项目文件夹

我们创build了一个TFS构build定义来运行一个自定义的msbuild文件,然后工作空间文件夹在工作空间获取最新期间没有在External @ Project1文件夹中获取任何内容。 看来,tfs得到失败,但不显示任何错误。

经过一些试验和错误,并将该文件夹重命名为_Project1。 瞧,我们得到的文件夹(_Project1)上的文件。

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

工具: TFS电动工具

资料来源: http : //dennymichael.net/2013/03/19/tfs-scorch/

命令: tfpt scorch /recursion/删除C:\ LocationOfWorkspaceOrFolder

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

原因: TFS只会与工作区中的项目进行比较。 如果在工作区之外进行更改,TFS将不知道。

希望有人认为这有用。 删除了不同位置的一些文件夹后,我发现这篇文章。 不记得我删除了哪些文件夹排除了我会用的通常的强制获取/replace选项。