Team Foundation Server 中的 "Excluded Changes" 是什么?

What are "Excluded Changes" in Team Foundation Server?

当我使用 Visual Studio 2013 Professional 检查 TFS Express 2013 中的更改时,有一个 "Excluded Changes" 列表,其中包含 1541 个项目。

我从未告诉 TFS 排除更改,并且不明白为什么有人甚至想要 "exclude" 更改(源代码管理不就是关于保存更改吗???)。我有点担心我有没有保存的更改......但我什至不确定这是否是它的意思。我在 TFS 中搜索了有关 "Excluded Changes" 的更多信息,但没有找到任何解释。

谁能给我解释一下:什么是 Excluded Changes?为什么我要排除更改?为什么有 1541 个我从未要求排除的更改?我是否应该担心更改被排除在外?我应该将这些排除的更改更改为包含的更改吗?

有许多因素会导致“更改”被排除:

  1. 默认情况下,Team Explorer 将忽略 obj/*bin/* 以及其他几个文件夹中的文件。以及某些扩展名,例如 .csproj.user.
  2. 它们没有加载到您当前的解决方案中,因此团队资源管理器假定它们是作为不同解决方案的一部分制作的,并且您不想将它们与确实匹配上下文的更改一起签入你来了。
  3. 它们是在不同的工作区中创建的,Team explorer 再次假定您要签入逻辑上有意义的文件组。
  4. 他们被手动排除在当前签入之外。当您想首先签入一个修复错误 123 的文件,然后签入另一组修复错误 124 的文件时,您可以这样做。
  5. 在 Visual Studio 之外创建的文件永远不会自动添加,因此当您压缩一组 .cs 文件并且该压缩文件最终出现在您的工作区文件夹中时,Team Explorer 会检测到它,但不会自动添加。
  6. 这里可能会出现最后一个问题,如果由于某种原因项目没有添加到源代码管理,或者解决方案文件中的绑定没有正确签入,那么任何文件都添加到该项目也将被忽略,因为 Visual Studio 假定该项目不应受源代码控制。
  7. 使用“添加现有项目”不会自动将该项目置于与解决方案相同的源代码管理绑定下。这将导致团队资源管理器假设 6.
  8. 该路径以前可能已被“隐蔽”或“未映射”,映射文件夹后不会告诉团队资源管理器添加它们。
  9. 您可能一直在离线工作并使用服务器工作区。当您告诉团队资源管理器重新联机时,您需要确保所有添加都正确完成。本地工作区没有这个问题,因为它可以在本地跟踪更改而无需与服务器通信。
  10. 您可能已经从解决方案资源管理器(或单个项目或项目)或源代码管理资源管理器中的子文件夹中选择了“签入挂起的更改”。当您这样做时,Team Explorer 将 Pending Changes window 的范围限定为仅匹配该上下文的项目。所有其他更改暂时移至“排除的更改”部分。

您应该检查排除的更改列表并使用您的 .tfignore 文件忽略它们。您也可以从 UI 执行此操作,方法是右键单击此类排除的更改并选择按 path/extension 或模式忽略的选项。

基本上,如果您在“排除的文件”部分看到内容,请 right-click/include 它们或将它们添加到您的 .tfignore 文件中。

这样至少很清楚该列表中的项目尚未经过评估,很可能需要包括在内。

您可能还想通过打开 File/Source Control/Advanced[= 来检查您的源代码管理绑定68=]/更改源代码管理绑定... 以确保所有项目都显示为绑定到源代码管理并且不显示任何错误。

一些额外的上下文

在 Git 以及其他源代码控制系统中,更改通常 不会 自动挂起。这是为了防止您不小心签入您不打算签入的内容。在 Git 中,您需要显式调用 git add 以将更改标记为您打算提交的更改。在您这样做之前,更改被视为“未跟踪”,这本质上是 TFVC 的“排除的更改”功能。

Subversion (SVN) 具有类似的行为,其中更改的文件被标记为 unversioned 并且需要通过调用 svn add.

显式添加

所以这对于源代码控制系统来说并不是很奇怪的行为。它实际上将 you 置于 controlsources.

想再举一个排除文件的情况。如果您从模板添加项目或向项目添加包含默认名称(如 "MainWindow")的新项目,则在提交更改之前重命名或删除该文件。 "MainWindow" 将在排除的更改中,具有新名称的项目将在包含的更改中。在这种情况下,您可以安全地删除它们。