【问题标题】:Why are all files marked with 'merge' in TFS?为什么在 TFS 中所有文件都标有“合并”?
【发布时间】:2023-04-09 02:31:01
【问题描述】:

我正在将我的开发分支合并到主分支中。我在开发分支中只更改了一部分文件,所有其他文件应保持不变。从逻辑上讲,我只想合并已更改的文件。我不会签入我没有更改的文件。

但是当我在 TFS 中执行合并操作时,它会将树中的每个文件都标记为更改类型“合并”。看起来我必须检查整个源代码树中的每个文件!我真的不想这样做,因为这样就不可能查看变更集并查看我在项目中实际更改了哪些文件。

起初,我以为我可以使用 tfpt.exe Undo Unchanged 命令撤消所有“合并”更改,但这不会撤消这些更改。

有人对此有任何想法吗?谢谢。

【问题讨论】:

  • 我们有 TFS 2008 但 Visual Studio 2005

标签: tfs merge tfs-power-tools


【解决方案1】:

这也发生在毫无根据的合并中。当 TFS 在您要合并的分支之间没有现有的合并关系时,就会发生无根据的合并。因此,它认为两个分支中的每个文件都是“新的”,因此它会“合并”每个文件。

要创建合并关系,以便将来的合并仅列出您实际更改的文件,您需要对直到指定版本的所有更改进行无根据的合并,以便 TFS 知道公共基线应该是什么。您应该合并这些更改后执行此操作 - 现在更正此分支的基线为时已晚。

如果您实际上不想从其他分支进行任何更改,而只是告诉 TFS 这些在逻辑上处于同一版本,您可以对更改集进行合并“给予信用”:tf merge /discard

【讨论】:

    【解决方案2】:

    有很多可能的原因。这不是一个完整的列表:

    • 您对 标记为“合并”的文件
    • 您执行了已在目标分支中执行的命名空间操作(删除、取消删除、重命名)
    • 您执行了一系列命名空间操作,这些操作合并为无操作(例如删除 + 取消删除,或重命名 a -> b -> a)
    • 存在未解决的冲突
    • 您正在弃牌

    注意:所有这些都同样适用于 2005 年和 2008 年。

    【讨论】:

    • 如果你重命名你的分支也会发生这种情况,它会出现。
    • ^ 是的。可能会认为它是 #1 的特殊情况,但“根重命名”实际上在 TFS 中确实有特殊处理,所以值得一提……谢谢。
    • 这在我们的 TFS 2010 服务器中经常发生。而且我们没有完成您列表中的任何事情。
    【解决方案3】:

    在 Visual Studio 2008 和 TFS 2008 中,不会发生这种情况。只有已更改的文件才会被标记为合并。如果您比较分支和主干之间的文件,是否有任何变化?编码等更改仍然会使 TFS 合并此文件。

    【讨论】:

    • 太棒了!我有 TFS 2008 但 VS 2005,所以我猜这是客户端的功能。
    • 不,挂起的更改完全在服务器上计算。有关详细信息,请参阅 VersionControlServer.QueryPendingSets() API。
    • 没错。无论哪种方式,编码更改或任何代码更改都会将此标记为需要合并。
    • TFS 2010 和 VS 2010 仍然会发生
    • 确实,这仍然会发生,即使 VSTS 在线。
    猜你喜欢
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 2021-03-11
    • 2021-10-22
    相关资源
    最近更新 更多