筛选 Visual Studio 2013 TFS 合并到仅实际更改的文件

Posted

技术标签:

【中文标题】筛选 Visual Studio 2013 TFS 合并到仅实际更改的文件【英文标题】:Filter Visual Studio 2013 TFS merge to only files that have actually changed 【发布时间】:2014-07-04 03:51:37 【问题描述】:

我正在两个分支之间进行合并,TFS/Visual Studio 2013 正在识别需要合并的 1800 个文件。但是,在两个分支之间进行比较表明实际上只有大约 100 个不同。

待定更改窗口主要证实了这一点,因为所有文件都以 [合并] 状态列出,但实际更改的文件除外;那些具有[合并,编辑]状态。

有没有办法过滤待处理的更改列表以仅显示真正更改的文件,以便我可以直观地检查差异?必须滚动并手动执行此操作非常容易出错,跳过仅显示 [merge] 的项目。

我目前的替代方案是在分支上进行差异化,并专门在待定更改窗口中查看被标识为不同的文件,但这对于本应简单的事情来说相当麻烦。

编辑:这是挂起更改窗口的屏幕截图。我只关心 [merge,edit] 的项目,因为这意味着有变化,我想看看差异。冲突将显示在“解决冲突”窗口中。我不关心 [合并] 项目,因为它们是相同的。有 1000 个文件没有更改,但我想挑出已更改的文件并检查差异。

【问题讨论】:

可以分享截图吗? @LukkhaCoder 我添加了截图。 具有讽刺意味的是,vs2010 可以这样,所以如果你身边有一个副本,你可以使用它。既然你专门为 vs2013 标记了你的问题,我猜你已经知道了,但我想我会把它扔掉以防万一。 会喜欢这个功能。在 MSDN 论坛和内部邮件列表中也有人问过这个问题。 【参考方案1】:

尝试以下技巧: 在团队资源管理器中,Ctrl+A所有包含的更改,右键单击并选择Undo...

您将看到 撤消待定更改 对话框,其中包含已选择的所有项目。首先,取消选中所有内容。然后观察您有一个名为 Change 的列,您可以对其进行排序以将所有 [Merge] 更改堆叠在一起,您可以将它们全部检查并通过单击撤消它们。

【讨论】:

【参考方案2】:

有一个工具可以实现这一目标,“qb​​us vMerge” - 这是 Visual Studio 库中提供的 Visual Studio 2012/2013 插件。但它仅对最多 5 个注册用户的团队项目免费。在预签入对话框中,您可以按编辑、删除和添加过滤更改。

链接: http://visualstudiogallery.msdn.microsoft.com/cb2f3f5b-7cea-4f2b-9d47-0e51b2619bd0

自白:我是贡献者之一。

【讨论】:

vMerge 支持 VS 15/17 吗?【参考方案3】:

您可以进行合并,在签入文件之前,只需将您的分支文件夹与最新版本进行比较。因此,例如,如果您要从任何地方合并到 branch-Servicing,请将$/branch-Servicingyour local workspace for that branch 进行比较:

您将获得所有二进制文件的列表。只需双击即可查看差异。

【讨论】:

我的 VS2013 将不接受此对话框的任何部分中的文件夹。 @fastmultiplication 您可以直接从源代码管理资源管理器中目标文件夹的上下文菜单中选择比较。也许我安装了 Microsoft 的 tfs 电动工具和/或 vs 生产力扩展,以便能够做到这一点。【参考方案4】:

如果您想查看合并中的所有更改,不包括没有更改的仅合并,最简单的方法是从 VS 命令行运行tf diff。这将对所有更改的文件使用 diff 工具。我相信这显示了添加和编辑。我真希望你能像以前的版本一样按照更改操作的类型对待处理的更改窗口进行排序。

【讨论】:

【参考方案5】:

我一直在努力解决同样的问题。 ChangeType 曾经是在 vs 2012 挂起更改的列表视图中可用的列。我希望它会被添加到 2015 年,但没有这样的运气。

这是针对待处理更改执行此操作的命令行方式:

tf status pathToWorkspace /format:brief /recursive |找到 ", " > c:\merge.txt

例如:

tf 状态 c:\tfs\main /format:brief /recursive |找到 ", " > c:\merge.txt

不是很漂亮,但至少它很容易得到过滤后的列表。

【讨论】:

【参考方案6】:

总结:http://thesoftwarecondition.com/blog/2011/05/01/tfs-pending-changes-ignoring-files-which-are-identical-to-the-originals/

方法一:TFS 电动工具

安装 TFS Power Tools 并在分支的根目录下执行tfpt uu /noget /r *。因此,TFS 将检查并撤消任何未更改文件的签出,同时保留您修改过的文件。

方法 2:撤消结帐

另一个选项是“撤消结帐”所有更改,并在要求确认撤消结帐时单击“全部否”。这样,Visual Studio 将“撤消签出”所有未更改的文件,并且所有更改的文件将保持签出状态。 缺点:此方法撤消重命名。

【讨论】:

但是合并挂起的更改不是可以简单地撤消而不会受到惩罚的“未更改”项目。合并挂起的更改为两个分支建立了新的基线。你应该检查一下。 虽然需要签入 [merge] 挂起的更改,但可以稍后在查看并签入 [edit, merge] 更改后完成。所以我认为这是一个有效的解决方案,至少“方法2”,方法1对我不起作用。【参考方案7】:

我的问题是你为什么在乎?

如果您执行合并,TFS 将在运行时确定文件不需要修改,并且您不会在注释工具中看到它们已更改。但是,如果您选择要合并的文件,您将留下一堆“待处理的合并”,您将不得不稍后处理......

如果有冲突,TFS 会突出显示给您处理。

如果您确实需要在合并之前进行比较,您可以使用 Visual Studio 中内置的 diff 工具,它可以让您区分分支(或只是文件夹)本地->本地、本地->服务器或服务器->服务器。

【讨论】:

我关心是因为我想查看 TFS 正在合并的更改吗?对于相同的文件,我不需要查看它们。我不是要选择要合并的文件,而是要选择需要在差异工具中手动检查的文件。 TFS 将突出显示冲突(当文件在源和目标中都发生更改时),我可以在冲突窗口中处理这些冲突。我很想看到源文件发生了变化但目标文件没有发生变化,并查看了差异。 我也会举例说明原因。某些文件(例如我添加的屏幕截图中的 versioninfo.properties)存在 TFS 可以合并没有问题的差异。但是,我不希望将这些更改按原样合并。我需要在签入之前让 TFS 合并和编辑文件,或者使用 /discard 选项手动合并该文件。这些是我希望通过对更改的文件进行代码审查来避免的无意更改。 您可以进行合并,然后与原始版本进行比较,看看实际发生了什么变化? 跟踪变更集在 10000 个文件后停止工作。这意味着如果您在 TFS 中有超过 10000 个文件,则除非您通过手动过程来消除未更改的文件,否则将失去此功能。

以上是关于筛选 Visual Studio 2013 TFS 合并到仅实际更改的文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Visual Studio 2013或Visual Studio 2017设置TFS 2013

Visual Studio 2012与TFS 2013的兼容性

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

如何将 Visual Studio 2013 连接到 TFS 2018 服务器

在Visual Studio 2013中更改TFS源代码控制映射

项目未显示为在Visual Studio 2013中签入TFS