ChatGPT解决这个技术问题 Extra ChatGPT

为什么 TFS 没有得到最新的得到最新的?

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

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

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

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

我看到的最愚蠢的事情是,即使本地文件因某种原因被删除,“获取最新版本”也无济于事。我会认为检查本地文件是否至少存在是一件很明显的事情。但是为什么它不能将服务器上每个文件的时间戳与您上次获取的时间(可以存储在本地某个地方)进行比较,这让我感到困惑。
这应该是一个评论。
这是 2020 年 9 月。我来这里的原因和大多数人一样。获取最新不会获取最新。我删除了整个解决方案文件夹!关闭VS,清理垃圾箱,重新启动我的手机。从 TFS 源代码管理资源管理器打开 sln 文件。我仍然得到文件和 projs 不工作/丢失文件。

N
NotMe

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

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

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


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

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

如果有疑虑:

撤消对文件的挂起签入

之后进行比较以确保您的文件与预期版本匹配

之后在整个项目上运行递归“比较”,看看还有什么不同

密切关注挂起的更改窗口,有时您可能需要检查“获取服务器版本”以解决不兼容的挂起更改

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

在“输出”窗口中留意以下消息:警告 - 无法刷新 R:\TFS-PROJECTS\www.example.com\ExampleMVC\Example MVC\Example MVC.csproj,因为您有一个待定的编辑。

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


谢谢,您的回答 (Undo pending changes) 对我有用。
只需确保仅撤消您真正要替换的文件上的更改,而不是您正在处理的所有内容
@Simon_Weaver 谢谢这解决了我的问题,但为什么它仍然非常烦人是有道理的。
R
Rowland Shaw

TFS 与其他一些源代码控制提供程序(例如 Perforce)一样,这样做,因为系统知道您成功获得的最后一个版本是什么,所以 get latest 变成“get changes since x”。如果你遵守它的规则并在编辑它们之前实际检查它们,你就不会混淆问题,并且“获取最新”确实如其所说。

正如您所看到的,您可以强制它重新评估所有内容,这具有更大的带宽使用量,但行为更接近 SourceSafe 过去的方式。


n
noonand

如果没有说明它如何不工作的示例,很难对声明做出回应,但了解 TFVC(在“服务器工作空间”模式下,这是 TFS 2012 之前的机制)不检查本地文件系统的状态至关重要。 TFVC Server Workspaces 是一种“签出-编辑-签入”类型的系统,这是设计使然,这是为了大幅减少确定工作空间状态所需的文件 I/O 量而做出的有意决定。相反,工作区信息保存在服务器上。

这允许 TFVC 服务器工作区非常有效地扩展到非常大的代码库。如果您在一个数 GB 的代码库中(如 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 文档和博客也提供了详细信息:

决定使用本地工作区还是服务器工作区

服务器工作区与本地工作区

Team Foundation Server – 试图了解服务器与本地工作区


很好,内容丰富的答案,但我不确定“将文件标记为只写”是否回答了 OP。我知道我正在使用 Visual Studio(现在是 2013 年)对 MVC .NET 项目中的 *.cs 文件进行所有更改,当我启动我的笔记本电脑时,“获取最新”经常让我陷入困境'm 几乎货物 culting “高级 >>> 获取特定 >>> 最新 >>> 覆盖”现在。没有 VS 之外的编辑或签入。 VS 找到我编辑过的文件并将它们正确放入 Pending Changes 中。我用VS检查它们。我看不到任何会“伤害自己”的东西,但 get latest 并不能可靠地工作。 ??
@ruffin您是说获得最新的挂起?这不是我对 OP 问题的解释。它会完成吗?其他操作是否缓慢,或者只是一个获取? Get w/ Overwrite 是不是很慢或者只是通常的 Get Latest?
不,不会挂起。我可以获取最新版本,并且它似乎可以正常工作(并且工作速度相当快),但文件不会更改。如果我做得到具体的>>>最新的>>>覆盖,just as @NotMe suggestions,文件“赶上”。可能的红鲱鱼:偶尔也会发生在 Shelfsets 上。是的,我的工作路径是正确的,或者 Get Specific 行不通,我不相信。
我在这里没有什么好的建议。如果您认为长期存在的问题可能是错误,我希望您能联系支持人员。无论这是否是错误,您都应该解决此问题。
H
Hammad Khan

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 会认为你没有任何本地副本,即使你有它在文件中,它会再次同步所有内容。

注意:使用此方法需要您自担风险。请不要在关键工作上使用它。


当没有其他方法时,这对我有用。我尝试获取特定版本并选中两个复选框以强制下载,但这不会获取文件。我认为有些东西是腐败的。但这个解决方案奏效了。
D
David

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


告诉我们如何重置此 [最后更改] 信息;而不是我们已经知道的 :) 而且您帮助 OP 解决了其他人无法弄清楚的问题。
L
Lasse V. Karlsen

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

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

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

我们将构建服务器更改为始终使用获取特定版本类型的函数,因此这部分现在可以工作,但是由于我们的构建服务器(TeamCity)还依赖于检查文件是否有更改以启动构建,有时它会陷入“没有改变,这里什么都看不到,继续前进”模式并且在我们强制运行构建配置之前什么都不做。

请注意,我在从未接触过的机器上遇到过这个问题,除了手动获取最新 + 构建,因此没有任何篡改文件。只是 TFS 感到困惑。

有一次出现这种情况,我验证磁盘上的文件确实是与之前检索到的版本相同的二进制文件,因此没有对文件进行手动篡改。

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


TFS 依赖于文件版本号来了解您是否拥有“最新”版本。该数字完全在 TFS 中维护,并且仅在有人签入时才会更新。因此,当您“获取最新”时,TFS 会检查它的数据库以查看发送给您的最后一个版本是什么。如果这个数字等于当前版本,那么它认为你是最新的;无论您的本地文件系统上实际有什么。这个想法是限制网络流量。不幸的是,此模型的唯一工作方式是所有编辑都发生在具有 TFS 知识的应用程序中。
此外,我同意 2005/08 版本至少存在一个错误。我已经在多台机器上看到了您描述的确切问题;这就是导致我虔诚地使用获取特定版本的原因。
在某些情况下,编辑完全在一台机器上的 Visual Studio 中进行,另一台机器的唯一目的是获取最新的 + 构建,永远不会进行本地更改。然而,它设法把这件事搞砸了。至少可以说,我对 TFS 源代码控制印象不深。希望 2010 年这些问题会少一些。
W
WalkingCat

可能是因为你是同一个用户登录TFS,并且工作区名称(默认基于机器名)也一样,所以TFS认为你在同一台机器和同一个工作区,因此你已经有了最新版本的文件,所以它不会为您获取它们。

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


m
mjlarezzo

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


N
Nir

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

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

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


A
Amira Bedhiafi

https://i.stack.imgur.com/faR7v.png

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

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


请描述需要检查的项目,而不是发布屏幕截图。
伙计..这里的每个人都在谈论这个覆盖。这正是我们无法信任的方法。
l
levelnis

我看到的大多数开发人员抱怨“获取最新”没有按照他们的预期执行的问题都源于他们从解决方案资源管理器而不是源代码管理资源管理器执行获取最新的事实。解决方案资源管理器仅获取作为解决方案一部分的文件,并忽略解决方案中的文件可能需要的任何内容,因此是源代码控制的一部分,而源代码控制资源管理器将您的本地工作区与服务器上的存储库进行比较以确定哪些文件是需要的。


我从团队资源管理器中尝试过,仍然是相同的结果。就我而言,我删除了该文件夹并想再次获取最新副本,但没有运气。
我不同意这个答案。如果您有不同解决方案使用的共享项目,则必须在解决方案资源管理器中执行此操作,否则它只会在该特定 TFS 路径上执行 Get
如果您不应该使用它,为什么要从解决方案资源管理器中添加该选项?当我单击“显示所有文件”时,该文件在那里,但未包含在我的项目中。奇怪,因为我什至不是添加它的人。
我尝试从解决方案控制器(我的文件资源管理器)获取最新信息,并从 TFS 以 sln 形式打开。删除整个 sln 文件夹,包括隐藏的 tfs .vs 文件夹?是的。也试过了:)
M
Mohamed Badr

当您从具有相同帐户的两台不同机器上使用 TFS 时可能会发生这种情况,如果是这样,您应该比较以查看更改的文件并签出它们,然后获取最新的然后撤消挂起的更改以删除签出


L
Ludwo

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


H
Himanshu Patel

在我的情况下,获取特定版本,即使选中两个复选框并撤消所有待处理的更改也不起作用。

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

修复了路径并获得最新的工作正常。


E
Etherman

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

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

(这是在 .Net Framework 项目中,可能像 Core 这样的其他框架表现不同)


b
bherto39

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

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

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

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


无论是否使用 TFS,您都不应该在项目文件夹名称中使用特殊字符!
@ 并不特别。 % 等也不是。只是微软的懒惰导致这些字符与“正常”字符的处理方式不同。
N
Nick

工具: TFS Power Tools

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

命令:tfpt scorch /recursive /deletes C:\LocationOfWorkspaceOrFolder

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

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

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


ח
חרות

我遇到了同样的问题:

我的开发服务器损坏并恢复,但恢复的信息是几天前的。

TFS 已更新所有文件都是最新的,但实际上我的文件几天前是正确的!

我所做的没有任何帮助。 get latest 没有得到最新版本。

最后,我得到了一个月前的具体变化。我的文件已相应更新,然后我确实得到了最新的。

它奏效了。文件已更新。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅