在进行未更改的合并时,列为待定更改的文件?

时间:2013-03-25 16:27:26

标签: tfs merge tfs2012

我们已经发生这种情况超过几次我们认为它不仅仅是侥幸在这一点上。当我们完成我们的分支后,当我们合并时,有更多的变化,那么它们应该是。因此,显示为挂起更改的大多数文件从未更改(在大多数情况下,无论是分支还是基础)。当我比较它们(我使用超出比较)时没有差异。我没有查看所有未更改的文件,但在大多数情况下,它们似乎标记为[merge],实际更改的文件标记为[merge,edit]

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

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

5 个答案:

答案 0 :(得分:38)

对于遇到相同问题的任何人,解决方法是撤消待处理的更改。当您收到确认对话框时,选择“全部否”。只剩下待处理的更改。

答案 1 :(得分:24)

关于您更改了100个文件的问题,而TFS想要合并数千个。这通常是由renaming(或删除然后取消删除或移动)分支引起的。这让我咬了几次,我感到很痛苦。

我能给出的最佳建议是,一旦你创建了一个分支,就不管它了。不要移动它,不要重命名它。如果分支的位置或名称错误,请使用它,直到删除分支并创建新分支为止。

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

e.g。你有一个看起来像这样的团队项目

$/TeamProject/Main

然后从“Main”创建一个名为“Dev”的分支

$/TeamProject/Dev

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

$/TeamProject/Development/Dev

现在确定移动是重命名和删除,旧的开发分支仍然存在于$/TeamProject/Dev下(您可以通过转到“工具”,“选项”,“源代码管理”, “Team Foundation Server”,然后检查“在源代码管理中显示已删除的项目”

的设置

名为$/TeamProject/Development/Dev的文件夹实际上是一个全新的东西!因此它与“Main”没有合并关系。令人困惑的是,IDE会显示关系,但实际上它并不存在。第一次从$/TeamProject/Development/Dev合并到$/TeamProject/Main TFS将执行偷偷摸摸的无基础合并以建立分支关系。

如果重命名分支,则会发生同样的事情(旧分支将被删除,并且将在封面下创建新分支)

This Blog进入更多细节

答案 2 :(得分:7)

上面的注释以及撤消确认对话框中的“全部不是”选项工作正常,但正如Mark Hosang评论的那样,如果您有新文件,这将无法正常工作。 Mladen Mihajlovic是对的,你可以确保不选择那些新文件。然而,由于代码库很大,涉及到这一点非常繁琐。

所以我的方法:在进入确认对话框之前,会出现一个窗口,用于选择要撤消的文件。此窗口具有可排序的列。您可以按Change列进行排序,只选择状态为merge的文件(这些是未更改的文件; merge, edit是已编辑的文件,merge, branch是新文件)。只需单击“撤消更改”,只需选择那些,然后享受整齐的合并变更集的美感。

Example

答案 3 :(得分:6)

试试这个:

  1. 选择所有待处理文件
  2. 在上下文菜单中点击'撤消...'
  3. 在撤消待处理的更改'对话框排序文件按'更改'柱
  4. 取消选择除&& 39; merge'之外的所有文件使用shift + click
  5. 点击按钮'撤消更改'

答案 4 :(得分:0)

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

合并分支时,当没有关系时,TFS总是在文件之间创建关系。因此,它希望签入" merge"记住这些关系。

我倾向于撤消这些"合并"当我不需要关系时(例如,重新表达),我会改变。