33

如果我们认为这不仅仅是侥幸的话,我们已经多次发生这种情况。当我们在完成分支后合并回来时,会有更多的变化。因此,大多数显示为挂起更改的文件从未更改(在大多数情况下,无论是在分支还是基础中)。当我比较它们(我使用超越比较)时,没有区别。我没有浏览所有未更改的文件,但在大多数情况下,它们似乎被标记为[merge],而实际更改的文件被标记为[merge,edit].

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

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

4

5 回答 5

39

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

于 2013-03-26T17:10:26.530 回答
25

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

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

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

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

$/TeamProject/Main

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

$/TeamProject/Dev

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

$/TeamProject/Development/Dev

好的,现在在幕后移动是重命名和删除,旧的 dev 分支仍然存在$/TeamProject/Dev(你可以通过转到“工具”、“选项”、“源代码控制”、“团队基础服务器”然后检查显示“在源代码管理中显示已删除项目”的设置

所谓的文件夹$/TeamProject/Development/Dev其实是一个全新的东西!因此它与“Main”没有合并关系。令人困惑的是,虽然 IDE 会显示一种关系,但实际上它并不存在。第一次从 TFS 合并时$/TeamProject/Development/Dev$/TeamProject/Main将执行一个偷偷摸摸的无根据的合并来建立分支关系。

如果你重命名一个分支也会发生同样的事情(旧的分支将被删除,并在幕后创建一个新的分支)

这个博客更详细

于 2013-03-25T17:51:32.247 回答
10

上面在撤消确认对话框中带有“全部拒绝”选项的评论可以正常工作,但正如 Mark Hosang 评论的那样,如果您有新文件,这将无法正常工作。Mladen Mihajlovic 是对的,您可以确保不选择那些新文件。然而,对于一个庞大的代码库,涉水通过这是非常乏味的。

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

例子

于 2017-01-04T19:10:19.767 回答
7

Try this:

  1. select all pending files
  2. on context menu click 'Undo...'
  3. in the 'Undo Pending Changes' dialog sort files by 'Change' column
  4. deselect all files except 'merge' using shift+click
  5. click button 'Undo Changes'
于 2016-12-09T16:05:58.687 回答
0

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

当合并分支时,TFS 总是在不存在关系的文件之间创建关系。因此,它希望以“合并”的形式签入以记住这些关系。

当我不需要这些关系时(例如,为了重新父母),我倾向于撤消这些“合并”更改。

于 2017-01-10T07:50:39.897 回答