Visual Studio TFS在待处理更改列表中显示未更改的文件

98

我在待处理更改窗口中看到一个文件。我尝试将其与最新版本进行比较,但收到一条消息“文件相同”。如果这些文件相同,为什么该文件会出现在待处理更改窗口中?该文件有何变化?我能否配置TFS不列出相同的文件?


61
这一定是TFS中最令人恼怒的“特性”之一。 - Bradley Thomas
我也遇到了这个问题——TF可以工作,但TFPT不行——我认为这是因为我正在使用“TFPT - Team Foundation Power Tools 2012”与Visual Studio 2010工作区... :-/ - BrainSlugs83
看起来我所要做的就是在Visual Studio 2012中连接到同一集合。有关更多详细信息,请参阅此帖子:https://dev59.com/OHI-5IYBdhLWcg3wn566 - BrainSlugs83
我在VS2015中遇到了同样的问题。自从VS2015更新2以来,就有了“暂存”/“取消暂存”更改的功能(我现在使用的是更新3,但我确定它是从更新2开始的)。对于我来说,右键单击“不明文件”并选择“暂存”,然后TFS就会意识到实际上没有任何更改,并将其从更改文件列表中删除。 - Geoff James
你如何获得一条消息,显示“文件相同”?它只是将文件并排显示,没有任何差异,但我没有看到任何相关的消息。 - Kyle Delaney
显示剩余3条评论
6个回答

49

如果文件发生更改并自动检出,最终文件内容又被更改回其原始状态,那么这是正常现象。此时您将看到有关比较结果的相同提示消息。

本博客文章介绍了一种不太直观的处理方式;在评论中,还有一个更好的建议,即通过TFS Power Tools通过命令行处理它。

TFS挂起的更改忽略相同的文件...


13
我强烈建议您使用tfpt uu强大工具,而不是简单粗暴的“全部否定”解决方案。此提示仅适用于添加和修改编辑操作。例如:只有挂起重命名操作(而非重命名+编辑)将在UI中无需提示即被撤消。 - Edward Thomson
8
如果原始博客文章消失了,该命令为tfpt uu /noget /r *,必须从分支的根目录执行。尽管它正确地检测到了冗余更改并声称撤消它们,但我在VS和Check In对话框中仍然看到它们被签出,所以在我的情况下似乎是有问题的 :/ - Mike Chamberlain
2
这种情况发生的另一个可能性是,如果您切换文件的“只读”位而没有实际更改其内容。TFS有时可能会很烦人。 - arviman
2
参考“全部否定”解决方案,从链接中复制如下内容:“另一个选项是撤消所有更改的检出,并在确认撤消检出时单击“全部否定”。这样,Visual Studio将“撤消检出”所有未更改的文件,而所有更改的文件将保持检出状态。我总是使用这种方法。” - PJSimon
“全部不要”这个技巧很好,但它有一些缺点。例如-我使用我的工具来生成DB EntityFramework类。我在外部目录中生成它们,然后只需将它们拖入我的解决方案中。有时,即使没有更改,它仍然显示更改。这个“全部不要”的技巧可以去除它们。但是,如果有新的类被添加进来,那么就会从源代码控制中删除它们-我必须手动添加它们回来。 - Wish
https://marketplace.visualstudio.com/items?itemName=TFSPowerToolsTeam.MicrosoftVisualStudioTeamFoundationServer2015Power 安装了 Power Tools,并执行了 tfpt uu /noget /r * 命令,许多更改被还原。已确认。最终,在待处理的更改中仍显示未修改的文件已更改。 - mihkov

17

最近我刚将VS2010更新到了VS2013,但这个问题变得更糟了。 当你使用比较功能时,相同的文件根本不会弹出。我很讨厌这个问题,因为你必须仔细检查比较文件才能确定哪些文件真正进行了更改。

最终,我找到了一个解决方法:
在外部工具中添加“撤销未更改的签出”:

  • 命令:tfpt.exe
  • 参数:uu . /noget /recursive
  • 初始目录:$(SolutionDir)

运行此命令后,TFS将自动撤销所有文件中的冗余更改。
但这些文件仍保持签出状态,实际上它们已经被撤销并与最新版本相同。我认为这是TFS的一个bug。您只需要在解决方案资源管理器下的工具栏中单击刷新图标,这些文件将被刷新并显示正确的状态!


2
我已经运行了"tfpt uu . /noget /recursive"命令,并且它声称工作区中没有冗余的待处理更改。使用的是VS2015和TFPT 2015。我的所有更改都是空的[合并]更改。 - fastmultiplication
我曾尝试过这个方法,但没有成功。似乎去掉参数中的点号后,它才能正常工作:uu /noget /recursive - dperez

10
为了让上述解释更清晰:
  1. 使用VS中的NuGet软件包管理器安装 TFS Power Tools。
  2. 从Windows启动菜单打开Visual Studio 命令提示符(也称为Developer Command Prompt for VS 2013/2015)。
  3. 通过命令提示符导航至本地工作区的根位置。
  4. 执行此命令:tfpt uu . /recursive /noget。
  5. 如果提示选择放弃冗余更改,请选择放弃。

对我有用。

此外:

有时候我发现需要在 Developer Command Prompt 的开头提示符上运行该命令(会得到“未找到工作区”错误),然后再导航到工作区文件夹并在那里执行。如果直接进入正确的文件夹,将找不到该命令。(我希望能解决这个问题。)


感谢你在2015年11月30日给出的答案。我一次又一次地遇到同样的问题,而你的回答非常完美。我试图给你点赞,但却出现了某种“时空连续性”错误。似乎与1955年11月30日和“需要1.21吉瓦特未找到”有关。 - Phil
很遗憾对我没用。无法确定工作区。已经尝试更新工作区缓存,但没有成功。2小时后,我将放弃并检查未更改的文件以摆脱它们。 - C4d
@C4u 我可能自己也开始遇到这个问题了,自从我转移到VS 2015以来。然而,已检出文件出现的问题已经消失了。我会看看能找到什么。 - Phil
1
我无法在NuGet中找到PowerTools,但是通过谷歌搜索“Microsoft Visual Studio Team Foundation Server 2013 Power Tools”成功找到并安装了它。 - Colin
@Versatile 在查看Visual Studio 2017时,您需要转到“工具”>“扩展和更新...”我不记得2013/15的菜单结构。也许我的答案需要更正。如果您有VS 2013/15并可以检查菜单结构,请随时编辑我的答案。 :) - Phil
似乎它不适用于VS2019。目前没有适用于VS 2019的Power Tools。 - Alex Blokha

1
我通过在更改中点击全部暂存按钮,然后使用全部撤销暂存解决了这个问题。

这解决了我在更改部分中未更改的文件。非常简单易懂。


0

Visual Studio 2012 引入了一个名为 本地工作区 的新概念。

当工作区位置配置为本地时,它会放置原始文件的本地副本(就像 SVN / CVS 一样)。

然后它将自动从待处理更改中隐藏未更改的文件。

使用 TFS 源代码控制资源管理器 "编辑..." TFS 工作区,并将 "高级..." 设置位置从服务器更改为本地。


我的工作区是本地的,但未更改的文件仍然出现在待处理更改中... 它不会自动撤消签出... - Ozkan

0

对我来说,调和工作区可以解决这些无效的待处理更改:

  1. 团队资源管理器 -> 构建
  2. 右键单击最新的带有您更改的构建 -> "调和工作区..."

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接