在进行未更改的合并时列为挂起更改的文件?

Posted

技术标签:

【中文标题】在进行未更改的合并时列为挂起更改的文件?【英文标题】:Files listed as pending changes when doing merges that didn't change? 【发布时间】:2013-03-15 05:37:01 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

这是我在使用 TFS2012 和 TFS2013 时经常遇到的情况。您的解决方案效果很好! 这适用于您仅对文件进行更改的情况。它不会合并您添加的任何新文件。 是 - 确保在选择文件时不要选择新添加的文件,因为它们将从待定更改中删除。 执行此操作的对话非常缓慢 - 每次更改约 1 秒+(我有 25k)。当然,如果您在中途取消它,它会还原所做的任何更改。 谢谢。当“tfpt.exe uu . /noget /recursive”失败时,这对我有用。我首先尝试了许多其他建议(例如,确保我在映射文件夹中;确保合并源/目标分支在某些时候没有被重命名;重新安装 TF Power Tools)但没有成功。我建议先搁置您的更改,以防流程出现问题。【参考方案2】:

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

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

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

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

$/TeamProject/Main

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

$/TeamProject/Dev

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

$/TeamProject/Development/Dev

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

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

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

This Blog 详细说明

【讨论】:

谢谢。好像就是这样。我知道 4sure 分支之一被移动 b4 试图合并。目前的我不确定,但可能就是这样。【参考方案3】:

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

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

【讨论】:

【参考方案4】:

试试这个:

    选择所有待处理的文件 在上下文菜单中单击“撤消...” 在“撤消挂起的更改”对话框中按“更改”列对文件进行排序 使用 shift+click 取消选择除“合并”以外的所有文件 点击“撤消更改”按钮

【讨论】:

【参考方案5】:

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

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

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

【讨论】:

以上是关于在进行未更改的合并时列为挂起更改的文件?的主要内容,如果未能解决你的问题,请参考以下文章

git merge 后打字稿更改未编译

TFS总是在项目文件上存在冲突,它拒绝自动合并,就像它对代码文件一样

未更改的文件上的 Git 合并冲突

独立的 Windows 应用程序在焦点更改时挂起

Azure Blob存储DownloadToStreamAsync在网络更改期间挂起

Git 将文件列为已更改但没有更改