在没有更改的合并时,被列为待处理更改的文件?

我们已经有过这种事情发生了几次,我们认为这不仅仅是侥幸。 当我们与我们的分支完成后,我们正在合并,有更多的变化,那么他们应该是。 因此,显示为未决更改的大部分文件都不会更改(在大多数情况下,分支或基地都不会更改)。 当我比较他们(我使用无法比较),没有任何区别。 我没有经历所有没有改变的文件,但是在大多数情况下,它们似乎被标记为[merge] ,而实际改变的文件被标记为[merge,edit]

在其中一种情况下,我们可能会更改大约100个文件,等待更改显示超过22,000个更改。 我们尝试过检查它们,认为tfs足够聪明,可以知道哪些文件发生了变化,哪些没有发生变化。 但它检查了所有文件。 有谁知道发生了什么事以及如何解决?

我们正在运行TFS 2012 w \ Update1
每个人都使用Visual Studio 2012 w \ Update 1。

关于你已经改变了100个文件的问题,TFS想合并几千个文件。 这通常是由重命名 (或删除,然后取消删除或移动)分支引起的。 这已经咬了我几次,我感到你的痛苦。

我可以给的最好的build议是,一旦你创build了一个分支,就把它放在一边。 不要移动它,不要重命名它。 如果分支的位置或名称是错误的,那么直到删除分支并创build一个分支。

由于TFS 201x在幕后工作的方式,更改分支的根文件夹有效地将其转换为不同的对象。 当您尝试再次合并分支时,TFS将执行无根据的合并,这意味着似乎分支中的所有文件都已经改变(即使它们没有改变)。这是新行为,旧版本的TFS(2005/2008 )不要遭受这个问题。

例如,你有一个看起来像这样的团队项目

$/TeamProject/Main

然后,您从“Main”创build一个名为“Dev”的分支

$/TeamProject/Dev

你可以尽可能地合并,不应该有任何问题。 然后你决定,当你有几个开发分支时,文件夹结构可能会有点混乱,所以你在团队项目的根目录下创build一个名为“Development”的文件夹,并将开发分支移动到这个文件夹

$/TeamProject/Development/Dev

OK现在在后台移动是一个重命名和删除,旧的开发分支仍然存在$/TeamProject/Dev (你可以通过转到“工具”,“选项”,“源代码pipe理”,“Team Foundation服务器“,然后检查”在源代码pipe理中显示已删除的项目“

名为$/TeamProject/Development/Dev的文件夹实际上是一个全新的事物! 因此它与“Main”没有合并关系。 令人困惑的是虽然IDE会显示关系,但实际上并不存在。 第一次从$/TeamProject/Development/Dev合并到$/TeamProject/Main TFS将执行一个鬼鬼祟祟的无底的合并来build立分支关系。

同样的事情发生,如果你重命名一个分支(旧的分支将被删除,并将在封面下创build一个新的分支)

这个博客进入一些更多的细节

对于有同样问题的人来说,解决方法是撤消未决的更改。 当你得到确认对话框时,select“全无”。 只有您的未决更改应该留下。

尝试这个:

  1. select所有未决的文件
  2. 在上下文菜单上单击“撤消…”
  3. 在“撤消挂起更改”对话框中按“更改”列sorting文件
  4. 使用shift +单击取消select除“合并”以外的所有文件
  5. 点击button“撤消更改”

上面的注释在撤消确认对话框中的“全无”选项可以正常工作,但正如Mark Hosang评论的那样,如果您有新文件,这将无法正常工作。 Mladen Mihajlovic是正确的,你可以确保不select这些新的文件。 但是,有了一个庞大的代码库,通过这个涉水是非常繁琐的。

所以我的方法:在进入确认对话框之前,您将看到一个窗口来select要撤消的文件。 这个窗口有可sorting的列。 您可以通过Change列进行sorting,只selectmerge状态的文件(这些是未更改的文件; merge, edit是编辑文件和merge, branch是新文件)。 只需单击撤消更改,然后享受整齐的合并变更集的美丽。

例

根据我的经验,当TFS在分支A中的文件A和分支B中的文件B之间没有关系时,会发生这种情况。

当合并分支时,TFS总是在没有关系的情况下创build文件之间的关系。 因此,它想检入作为“合并”来记住这些关系。

当我不需要这些关系时(例如重新build立关系),我倾向于撤消这些“合并”的改变。