Answers:
TFS重新定义了“获取最新”功能。用TFS术语来说,“获取最新”意味着获取文件的最新版本,但是忽略服务器认为已经在您的工作空间中的文件。对我以及地球上其他所有人而言,这是错误的。
请参阅此链接:http : //blogs.microsoft.co.il/blogs/srlteam/archive/2009/04/13/how-get-latest-version-really-works.aspx
使其执行所需操作的唯一方法是获取特定版本,然后选中两个“覆盖...”框。
有时Get specific version
即使选中两个复选框也无法获取最新文件。您可能已对文件进行了更改,并想通过重新获取最新版本来撤消那些更改。嗯...这Undo pending changes
是目的,而不是目的Get specific version
。
如果有疑问:
这是我刚刚发现的最喜欢的东西:
在Output
窗口中留意以下消息:
警告-无法刷新R:\ TFS-PROJECTS \ www.example.com \ ExampleMVC \ Example MVC \ Example MVC.csproj,因为您有待处理的编辑。
此重要消息出现在输出窗口中。没有其他通知!未完成的更改中没有任何内容,也没有其他对话框消息告诉您未检索到您明确请求的文件!是的-您只需运行Undo pending changes
并获取文件即可解决此问题。
Undo pending changes
)对我有用。
没有示例的工作方式就很难做出回应,但是了解TFVC(处于“服务器工作区”模式,这是TFS 2012之前的机制)不检查本地文件系统的状态至关重要。TFVC Server工作区是一种“签出-编辑-签入”类型的系统,这是设计使然,这是有意做出的决定,旨在大量减少确定工作区状态所需的文件I / O数量。而是,工作区信息保存在服务器上。
这使TFVC Server工作区可以非常有效地扩展到非常大的代码库。如果您使用的是数千兆字节的代码库(例如Visual Studio或Windows源代码树),则您的客户端不需要扫描本地文件系统,就可以查找可能已更改的文件,因为与TFS签订的合同是当您要编辑文件时,它将显式签出文件。
您不应将文件标记为只写并更改它,而不先显式地检出它。如果沿着这条路线走,则服务器将不知道您已对文件进行了更改,并且执行“获取最新”操作不会更新您的本地工作区,因为您尚未告知服务器已完成操作变化。
如果确实破坏了此机制,则可以使用该tfpt reconcile
命令检查本地工作区中是否有在本地进行的更改。
如果您发现自己使用“获取特定版本”并选择“强制”和“覆盖”选项,则很可能习惯于绕过TFS实施的所有强制措施,以免伤害自己,并且您可能应该考虑使用TFVC本地工作区。
TFVC本地工作区提供一个“编辑-合并-提交”类型的版本控制系统,这意味着您的并不需要显式地签出文件进行编辑之前,他们不只读磁盘上。相反,您只需要编辑文件,客户端就会扫描文件系统,注意到更改,并将其显示为挂起的更改。
对于不需要细粒度权限控制的小型项目,建议使用 TFVC本地工作区,因为它们提供了更好的工作流程。您不需要处于在线状态,并且在编辑文件之前不必显式地检出文件。
TFVC本地工作区是TFS 2012中的默认设置,如果未为您启用它们,则应询问服务器管理员。(具有非常大的代码库或严格的审核要求的组织可能会禁用TFVC本地工作区。)
Eric Sink的出色著作《示例控制版本》概述了签出-编辑-签入和编辑-合并-提交系统之间的差异,以及哪一种系统比另一种系统更合适。
该专业的Team Foundation Server 2013本书还提供了有关TFVC服务器工作空间和TFVC本地工作区之间的差异优秀的信息。MSDN文档和博客还提供了详细信息:
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会认为您没有任何本地副本,即使您已将其保存在文件中,它也会再次同步所有内容。
注意:使用此方法需要您自担风险。请不要在关键工作中使用它。
不幸的是,TFS 2008中必须存在一个或多个错误,因为这个问题经常出现在开发人员机器上并在我工作的地方构建服务器。
我可以执行“获取最新”,我可以在项目的历史记录列表中看到上次执行“获取最新”后已经提交过,没有以任何方式接触磁盘上的文件,但是在“获取最新”功能之后完成后,当我检查“ TFS”选项卡时,某些文件仍然显示它们不是最新版本。
显然,TFS可以确定我在本地有旧文件,因为列表中是这样的。但是,获取最新版本无法做到这一点,无法获取最新版本。如果我执行了您的操作,请使用“获取特定版本”,并选中对话框底部的两个复选框,然后将检索文件。
我们将构建服务器更改为始终使用“获取特定版本”功能类型,因此这部分现在可以正常工作,但是由于构建服务器(TeamCity)还依赖于检查文件是否已更改才能启动构建。 ,有时会变成“什么都没有改变,这里什么也看不到,继续前进”模式,并且在我们强制运行构建配置之前什么也没做。
请注意,我在从未动过的机器上遇到了此问题,除了手动获取最新+生成版本外,因此不会篡改文件。只是TFS感到困惑。
有一次,我验证了磁盘上的文件确实与以前检索的版本完全相同,因此没有对文件进行手动篡改。
另外,我看不到TFS如何在不实际查看内容的情况下“知道”磁盘上的文件是否已更改。如果TFS的一部分可以看到文件确实不是最新版本,则“获取最新版本”应该绝对能够获取最新版本。这是参考此处其他答案的评论。
我在开发人员中看到的大多数问题都抱怨“获取最新消息”没有达到他们期望的效果,这是因为他们正在从解决方案资源管理器而不是从源代码管理资源管理器中执行“获取最新消息”。解决方案资源管理器仅获取解决方案中包含的文件,而忽略解决方案中文件所需的任何内容,因此也忽略了源代码管理的一部分,而源代码管理资源管理器将本地工作空间与服务器上的存储库进行比较,以确定哪些文件是必需的。
当您从具有相同帐户的两台不同计算机上使用TFS时,可能会发生这种情况,如果这样,您应该进行比较以查看更改的文件并签出它们,然后获取最新的版本,然后撤消未决的更改以删除签出
只想添加TFS MSBuild不支持文件夹中的特殊字符,即“ @”
我过去曾遇到过一个名为“ External @ Project1”的项目文件夹
我们创建了一个TFS Build定义来运行自定义msbuild文件,然后在工作空间获取最新期间,工作空间文件夹未在External @ Project1文件夹中获取任何内容。看来tfs get失败了,但是没有显示任何错误。
经过一番尝试和错误后,将文件夹重命名为_Project1。瞧,我们在文件夹(_Project1)上找到了文件。
工具: TFS电动工具
资料来源: http : //dennymichael.net/2013/03/19/tfs-scorch/
命令: tfpt焦化/递归/删除C:\ LocationOfWorkspaceOrFolder
这将弹出一个对话框,要求您删除或下载文件列表。相应地选择或取消选择文件,然后按确定。网格中的外观(复选框,文件名,文件操作,文件路径)
原因: TFS将仅与工作空间中的项目进行比较。如果在工作空间之外进行了更改,TFS将不会意识到这些更改。
希望有人觉得这很有用。我在删除了多个位置不同的文件夹后找到了这篇文章。不记得我删除了哪些文件夹,但排除了我本应使用的常规“强制获取/替换”选项。
就我而言,获取特定版本,即使同时选中两个复选框并撤消所有未完成的更改也不起作用。
检查工作区。编辑当前工作空间。检查所有路径。解决方案路径不正确,并指向已删除的文件夹。
修复路径并获得最新效果。