【问题标题】:What are "Excluded Changes" in Team Foundation Server?Team Foundation Server 中的“排除更改”是什么?
【发布时间】:2015-07-23 15:17:46
【问题描述】:

当我使用 Visual Studio 2013 Professional 在 TFS Express 2013 中签入更改时,有一个“排除的更改”列表,其中包含 1541 项。

我从未告诉 TFS 排除更改,也不明白为什么有人甚至想要“排除”更改(源代码控制不就是关于 SAVING 更改吗???)。我有点担心我的更改没有被保存……但我什至不确定这是否意味着什么。我在 Google 上搜索了有关 TFS 中“排除的更改”的更多信息,但没有找到任何解释。

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

【问题讨论】:

    标签: tfs visual-studio-2013 tfvc


    【解决方案1】:

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

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

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

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

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

    您可能还想通过打开 File/Source Control/Advanced/Change Source Control Bindings 检查您的源代码控制绑定... 以确保所有项目都显示为绑定到源控制并且不显示任何错误。

    一些额外的上下文

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

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

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

    【讨论】:

    • 感谢您的解释,但这并不能帮助我理解为什么我排除了 windows 窗体文件(即 form1.cs、Program.cs)和排除了项目文件(即 EditHostFiles.csproj )。我没有手动排除任何东西。这些都是自动排除。我有数百个 *.cs 文件被排除在外。这当然让我担心,因为这些排除的文件是我的应用程序的主要文件。我想相信我在这里误解了一些东西......但如果我不是,那么如果默认情况下排除重要文件,TFS 就会出现很大问题。
    • 可能是 2,3 或 5 以上。
    • 2,3 或 5 不适用。以上建议均不适用于我的情况。例如:上周我只是在 VS 中创建了一个新项目。 VS 默认添加了 form1.cs。我在所述表单中添加了一些列表框和一些代码,将其保存,并将其签入 TFS。现在 form1.cs 文件本身在我的排除更改列表中。
    • 我了解默认情况下不包含在 VS 之外创建的 zip 文件、图形和其他文件。澄清一下,我指的是在 VS 中创建的文件在同一个工作区中,不在 bin 或 obj 文件夹中,并且没有被手动排除。
    • 感谢@jessehouwing 的倡议。我将您的答案标记为“已接受”。你给我的信息比我在其他地方找到的要多得多。我仍然认为您上面描述的任何情况都不适用于我的某些情况......但它们仍然被排除在外。再次感谢您的宝贵时间。
    【解决方案2】:

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

    【讨论】:

    • 感谢您的信息。欢迎来到 Stack Overflow!
    猜你喜欢
    • 2011-02-05
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 2018-09-22
    相关资源
    最近更新 更多