团队基础架构服务器中的“排除更改”是什么?

16

当我使用Visual Studio 2013 Professional对TFS Express 2013进行更改检查时,会有一个“已排除的更改”列表,其中有1541个项目。

我从未告诉TFS要排除更改,并且不理解为什么任何人都想要“排除”更改(难道源代码控制不是关于保存更改吗?)。我有点担心我的更改没有被保存...但甚至不确定这是否就是它的意思。我已经在Google上搜索过有关TFS中“已排除更改”的更多信息,但没有找到任何解释。

谁能向我解释:什么是已排除的更改?为什么我要排除更改?为什么有1541个已排除的更改,而我从未请求排除这些更改?我应该担心更改被排除吗?我应该将这些已排除的更改更改为“已包含”更改吗?

2个回答

18

有很多因素会导致更改被排除在外:

  1. 默认情况下,团队资源管理器会忽略obj/*bin/*和其他一些文件夹中的文件,以及像.csproj.user这样的特定扩展名。
  2. 它们没有加载到当前解决方案中,因此团队资源管理器认为它们是作为不同解决方案的一部分创建的,并且您不想将它们与符合当前上下文的更改一起检入。
  3. 它们是在不同的工作区中创建的,再次,团队资源管理器假定您想要检入逻辑上有意义的文件组。
  4. 它们已经手动从当前检入中排除了。当您想首先检入一个修复Bug 123的文件,然后检入另一组修复Bug 124的文件时,您可以这样做。
  5. 在Visual Studio之外创建的文件永远不会自动添加,因此,当您压缩一组.cs文件并将其放入工作区文件夹时,团队资源管理器会检测到它,但不会自动添加它。
  6. 还有最后一个可能出现的问题,如果某个项目由于某种原因未添加到源代码控制中,或者解决方案文件中的绑定未正确检入,则添加到该项目的任何文件也将被忽略,因为Visual Studio假定该项目不应该处于源代码控制之下。
  7. 使用“添加现有项目”不会自动将该项目放在与解决方案相同的源代码控制绑定下,这将导致团队资源管理器认为是6.
  8. 路径可能以前已经被"隐藏"或"取消映射",事后映射一个文件夹不能告诉团队资源管理器要添加它们。
  9. 您可能已经脱机工作并使用服务器工作区。当您告诉团队资源管理器重新联机时,您需要确保所有添加都正确完成。本地工作区没有此问题,因为它可以在不必与服务器通信的情况下本地跟踪更改。
  • 您可能已经在解决方案资源管理器(或单个项目或项)或源代码管理资源管理器中选择了“检查待定更改”。当您这样做时,团队资源管理器会将“待定更改”窗口范围限定为仅与该上下文匹配的项。所有其他更改都将暂时移动到“排除的更改”部分。
  • 您应该检查“排除的更改”列表,并使用您的.tfignore文件忽略它们。你也可以通过右键点击被排除的更改,并选择按路径/扩展名或模式进行忽略来实现UI方式操作。

    enter image description here

    基本上,如果您在“排除的文件”部分中看到东西,请右键单击/包含它们或将它们添加到您的.tfignore文件中。

    这样至少非常明显,列表中的项目尚未得到评估,很可能需要包含进去。

    您还可以通过打开文件/源代码管理/高级/更改源代码管理绑定...来检查源代码控制绑定,以确保所有项目都显示为绑定到源代码控制并不显示任何错误。

    一些额外的背景信息

    在Git以及其他源代码管理系统中,更改通常不会自动挂起。这是为了防止您意外地检入不打算提交的内容。在Git中,您需要显式调用git add将更改标记为要提交的更改。在此之前,该更改被视为“未跟踪”,这实际上就是TFVC的“排除的更改”功能。

    Subversion(SVN)具有类似的行为,其中更改的文件被标记为未版本化,并需要通过调用svn add来显式添加。

    所以这对于一个源代码管理系统来说并不是异常行为。它实质上将置于你的源代码控制之下。


    谢谢您的解释,但它并没有帮助我理解为什么我的窗体文件被排除了(即form1.cs、Program.cs),以及项目文件被排除了(即EditHostFiles.csproj)。我没有手动排除任何内容。这些都是自动排除的。我有数百个*.cs文件被排除。这确实让我感到担忧,因为这些被排除的文件是我的应用程序的主要文件。我想相信我在这里有所误解......但如果我没有,那么TFS排除重要文件是默认行为,这就有些不对了。 - Joe Gayetty
    可能是2、3或5。 - Lukkha Coder
    2、3或5不适用。以上建议都不适用于我的情况。例如:上周我只是在VS中创建了一个新项目。VS默认添加了form1.cs。我在该窗体中添加了几个列表框和一些代码,保存并检入到TFS。现在form1.cs文件本身在我的排除更改列表中。 - Joe Gayetty
    我理解在默认情况下,zip文件、图形和其他在VS之外创建的文件不会被包含。澄清一下,我指的是在同一工作区内,在bin或obj文件夹中不存在且未被手动排除的在VS中创建的文件。 - Joe Gayetty
    我添加了一堆额外的原因。很难确定为什么团队资源管理器选择忽略这些更改。你知道它们,并且应该决定是否要将它们检入或添加到.tfignore列表中。 - jessehouwing
    3
    感谢@jessehouwing的倡议,我已将您的答案标记为“已接受”。您提供给我的信息比其他任何地方都要丰富得多。尽管我仍然认为您上述描述的情况并不适用于我的某些情况……但它们仍然被排除在外。再次感谢您花费的时间。 - Joe Gayetty

    2

    我想再举一个文件被排除的例子。如果你从模板中添加了一个项目或者向你的项目中添加了一个包含默认名称(比如“MainWindow”)的新项,那么在提交更改之前将该文件重命名或删除。"MainWindow"会被排除在更改之外,而新名称的项会被包括在更改之内。在这种情况下,你可以安全地删除它们。


    感谢提供这些信息。欢迎来到 Stack Overflow! - Joe Gayetty

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