如何让 TFS 2010 检测对 Visual Studio 之外的文件所做的更改?

Posted

技术标签:

【中文标题】如何让 TFS 2010 检测对 Visual Studio 之外的文件所做的更改?【英文标题】:How to have TFS 2010 detect changes done to files outside of Visual Studio? 【发布时间】:2011-08-19 10:39:54 【问题描述】:

我将 Team Foundation Server 2010 与 Visual Studio 2010 结合使用。

每当我在 Visual Studio 之外修改文件时,TFS 似乎都不会检测到对文件所做的更改,因此不会为我提供在文件修改后签入文件的选项。

如何解决?

【问题讨论】:

Subversion 或 Git(可能还有其他)正在比较文件的哈希值而不是 API 来签入/签出文件。更简单,风险更小! 更糟糕的 TFS 甚至没有注意到需要签入已更改的文件,因此您经常会忘记它。直到您的同事将其签出并意识到您的代码无法编译或工作。难怪人们说 TFS 是“VSS 的强项”——更好,但仍然存在 VSS 的许多问题。 这是类固醇上的 VSS,就像类固醇会破坏你的身体一样。 【参考方案1】:

TFS 有一个“协调”命令:

    打开源代码管理资源管理器 右键单击有更改的文件夹并选择比较 选择要协调的文件(按CTRL+A选择所有文件) 点击协调按钮 在协调文件夹差异对话框中设置选项。确保将没有待更改的文件设置为签出 点击确定 如果您有本地更改,则会显示 Check Out 对话框。设置首选锁定类型 点击签出

另请参阅:Reconcile differences between folders

【讨论】:

这是最好的答案,因为它不需要命令行或有风险的“撤消挂起的更改”。 拯救了我的一天!我完全按照您的步骤进行操作,并且完全按预期工作。 :-) 按描述工作。应该是最好的答案。 不幸的是,在我的整个项目中执行此操作时,我收到错误 指定的路径、文件名或两者都太长。完全限定名称必须少于 260 个字符,目录名称必须少于 248 个字符。 选择单个文件夹对我来说不是一个选项,因为我不记得我已更改的所有文件目录。有什么想法吗? 在 VS 2015 更新 3 中完美运行,非常感谢。应该是最好的答案,没有棘手的命令让它工作【参考方案2】:

如果您在 Visual Studio 之外工作时与服务器建立了网络连接,则最好在编辑之前先检查文件,使用 tf 命令行客户端或使用 Windows 资源管理器TFS Power Tools 版本中提供的 shell 集成。 (此外,越来越多的其他工具具有 TFS 集成,可以自动执行此操作,但如果您只是使用记事本,这仍然需要手动执行。)

当然,很多时候您在工作时没有可用的网络连接来检查文件。

如果您知道自己修改了哪些文件,您可以在 Visual Studio 中将它们签出,然后您就可以将它们重新签入。

如果您不知道自己编辑了哪些文件,您可以通过运行tfpt online 命令(也是 Power Tools 版本的一部分)来检测更改。这将在本地找到已修改的文件并从服务器中检出这些文件。

【讨论】:

Visual Studio 似乎无法仅通过签出文件来检测文件更改。我刚刚尝试签出一个文件夹,内容作为编辑显示在待处理的更改中。然后我删除了文件资源管理器中的文件夹并刷新了挂起的更改,但 Visual Studio 没有说这些文件在挂起的更改中被删除。此外,这些文件仍然存在于解决方案资源管理器中。【参考方案3】:

这对我有用,使用 TFS 电动工具:

tfpt online /adds /deletes /diff /noprompt /recursive directory-name

(其中 directory-name 是要更新的目录的路径,否则它将检测整个 TFS 存储库中的更改)

如果您想知道它在不实际进行任何更改的情况下会做什么,您可以通过添加 /preview 开关强制它进行试运行。

【讨论】:

感谢@Adam Batkin 的提示。工作就像一个魅力,我现在修好了! +1 请注意,此命令行还会包含不需要的文件:*.user、BIN\、obj 等... 干杯,我正在寻找一种命令行方式,以便我可以从本地 Git 存储库自动更新公司的 TFS! @SteveB 有一个/exclude:fld_name/*,filename 开关可用于排除不需要的文件..这让我大吃一惊 我像这样运行tfpt online /deletes /noprompt /recursive directory-name 并有数千个文件要“更改”,所以必须撤消。但我从来没有碰过这些,只是删除了文件夹。【参考方案4】:
*1- make changes outside of Visual Studio
2- go to Visual Studio and open Source Control Explorer
3- right click on the folder > "Check Out for Edit" > "Check Out"
4- right click on the same folder > "Undo Pending Changes..." > "Undo changes" > "No to All"*

我在一个分支上测试了这个解决方法,它对我帮助很大。但是只有新文件和新文件夹必须手动完成。

我建议在操作之前创建一个分支。它将您隔离操作的时间。

注意:此技术也会对 TFS 始终标记为已修改的文件进行相同的清理。

【讨论】:

这应该是对alga帖子的评论,而不是新的答案。无论如何,我仍然建议不要这样做,原因与我在上面藻类建议时反对它的原因相同。 太棒了!正是我想要的(在我们公司移动了我们的 TFS 服务器之后,TFS/VS2010 对此感到困惑)。现在,我刚刚检查了我编辑的文件。谢谢! 这可行,但 MS 应该提供更好的方法来做到这一点。好的产品不需要命令行和 hack(特别是如果它嵌入到 VS 中)。 SVN 和 Mercurial 这样做是为了好玩…… 代替第 4 点,您可以使用 tfpt uu ***.com/a/544285/10245 这只会撤销你所做的。它不会让 Visual Studio 知道你做了什么。【参考方案5】:

试试这个。这是某种解决方法,但确实有效:

    在 Visual Studio 之外进行更改 转到 Visual Studio 并打开源代码管理资源管理器 右键单击文件夹 > “签出以进行编辑” > “签出” 右键单击同一文件夹 > “撤消挂起的更改...” > “撤消更改” >“拒绝所有

就是这样。更改现在可见。

【讨论】:

我真的不建议这样做——我最大的担心是我会粗心大意地使用这个并且不小心撤消了我所有的合法更改。此外,您正在签出所有文件,根据您的客户端和服务器配置,这些文件可能会锁定某些或可能所有文件,并且可能会在签出时获取最新信息,这肯定很烦人。 这只会撤销你所做的。它不会让 Visual Studio 知道你做了什么。 如果您创建或添加了新项目,在该会话中:Gone baby, gone!【参考方案6】:

还有另一种解决方案可以让 TFS 找出在 Visual Studio 之外发生更改的文件:

    离线打开解决方案 在解决方案资源管理器中选择解决方案文件,然后按“联机”按钮 ()

TFS 将在此之后自动扫描解决方案的更改。

第一步可以通过多种不同的方式实现。以下是一些:

使用GoOffline 扩展 - 非常简单有效。 如果在打开解决方案时要求您提供 TFS 凭据(无自动域身份验证),请不要输入凭据。该解决方案将离线打开,您将在按下“联机”按钮后登录 (极端解决方案)断开网线;打开解决方案;连接网线。

【讨论】:

【参考方案7】:

Visual Sourcesafe 也是这样工作的,我让 VSS 或 TFS 注意到更改的方法是在 Visual Studio 中检查文件一次。

【讨论】:

【参考方案8】:

打开源代码管理并转到您的 TFS 文件夹。右键单击文件夹并选择“比较”。

请注意,您编辑的文件显示为红色。

我发现这比 tfpt online 更好,它还可以获取非只读且未编辑的文件。

【讨论】:

【参考方案9】:

我过去遇到过这个问题,当时我的 Internet 出现故障并且我脱机工作,而我的大部分更改都没有出现在 Team Explorer 中。

按照以下步骤操作: 首先,在解决方案资源管理器中,选择您要重新协调的文件夹(对我来说,这是我的整个解决方案文件夹),然后选择比较... 点击Modify Filter,在filter文本框中输入:

*.cs;!obj\;!bin\;!packages\;

在此示例中,它将仅包含在搜索中的 C# 文件,并在以下文件夹中排除:bin、obj 和 packages。

请注意 Pending Change 列包含文件是否标记为编辑、添加等...或什么都没有的信息...

要标记为编辑(当本地项目有匹配的服务器项目时),选择文件并选择Check out for Edit... 要标记为添加(当本地项没有任何服务器项时),选择文件并选择添加文件

最后,我不确定为什么项目没有在此处列出(在我删除 *.cs 过滤器后,仍然没有显示),所以重新构建解决方案以确保项目也更新

+ 在解决方案中,单击显示 Go Online 的连接按钮(如果显示)。

【讨论】:

【参考方案10】:

我发现在 Visual Studio 2015 中,打开项目后,Visual Studio 自己发现文件已被外部修改,并自动将它们签出,而我无需做任何事情。以正常方式签入项目保存了外部修改。

【讨论】:

【参考方案11】:

就我而言,以下方法有效(至少我尝试过一次):

    转到待更改面板 在包含或排除的更改下选择查看选项。 在全部显示显示解决方案更改之间切换 如果需要,切换回来

更改查看选项似乎会强制刷新已修改的文件。

【讨论】:

以上是关于如何让 TFS 2010 检测对 Visual Studio 之外的文件所做的更改?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Visual Studio 2003 和 TFS?

如何让 Visual Studio 在 TFS 获取后打开解决冲突窗口

使用TFS 2010在Visual Studio 2012中进行代码审查

没有 TFS 的 Visual Studio 测试代理? (2010)

Visual Studio 2013 在 TFS 2010 上构建 - 构建问题

Visual Studio 2010 - TFS - 无法删除工作区,错误的完全限定用户名