【问题标题】:Merging from a VersionSpec in TFS: VersionSpec.Latest does not work as expected从 TFS 中的 VersionSpec 合并:VersionSpec.Latest 无法按预期工作
【发布时间】:2014-05-03 11:55:52
【问题描述】:

我在 TFS 中创建了一个实用程序来枚举从源分支到目标分支的更改和冲突。我想为源分支选择包含VersionSpec。但是,当我提供如下所示的默认 VersionSpec 时,我没有得到预期的结果。我已经使用 GUI 进行了合并,它显示了 19 个零冲突的更改。但在 TFS API 中,它告诉我,如果我使用 VersionSpec,则没有任何变化,如图所示。

VersionSpec spec = VersionSpec.ParseSingleSpec("T", null)
mergeStatus = workspace.Merge(ServerSourcePath, ServerTargetPath, spec, null, LockLevel.None, RecursionType.Full, MergeOptions.None);
//mergeStatus.noActionNeeded returns TRUE

//OK now try another method
spec = VersionSpec.Latest
mergeStatus = workspace.Merge(ServerSourcePath, ServerTargetPath, spec, null, LockLevel.None, RecursionType.Full, MergeOptions.None);
//mergeStatus.noActionNeeded returns TRUE again

//But if I try using null instead of a VersionSpec....
mergeStatus = workspace.Merge(ServerSourcePath, ServerTargetPath, null, null, LockLevel.None, RecursionType.Full, MergeOptions.None);
//mergeStatus.noActionNeeded returns FALSE, and I am able to see all 19 changes

那么为什么 null 在这里可以正常工作,而其他两种方法却不行呢?虽然我确实打算在这种情况下使用 null,但另一种方法缺乏可靠性让我怀疑我不能相信任何VersionSpec 的结果,例如LabelVersionSpec。我相信在使用LabelVersionSpec 进行测试时,我可能已经看到了一些可疑的结果,所以我需要了解是否有我需要解释的差异的原因。

【问题讨论】:

    标签: version-control tfs tfs-sdk


    【解决方案1】:

    由于微软通常缺乏详尽的文档,我将fromVersiontoVersion 参数分别误解为sourceVersiontargetVersion(将“从”一个分支“合并到”另一个分支),尽管我做了想知道在目标分支中有一个VersionSpec 的用例会是什么,因为您总是将它应用于提示。事实证明,fromVersiontoVersion 似乎可以选择变更集的子集,因此在上面的代码中,VersionSpec 规范变量应该在 toVersion 参数中使用,而不是 @ 987654330@。 fromVersion = null 意味着合并应该回到分支中的初始变更集(或者可能是最后记录的合并),而 toVersion = null 意味着合并应该使用直到 Tip/最近的变更集的所有内容。

    更新代码:

    VersionSpec spec = VersionSpec.ParseSingleSpec("T", null)
    mergeStatus = workspace.Merge(ServerSourcePath, ServerTargetPath, null, spec, LockLevel.None, RecursionType.Full, MergeOptions.None);
    //mergeStatus.noActionNeeded returns FALSE
    
    //OK now try another method
    spec = VersionSpec.Latest
    mergeStatus = workspace.Merge(ServerSourcePath, ServerTargetPath, null, spec, LockLevel.None, RecursionType.Full, MergeOptions.None);
    //mergeStatus.noActionNeeded returns FALSE again
    
    //And if I try using null instead of a VersionSpec....
    mergeStatus = workspace.Merge(ServerSourcePath, ServerTargetPath, null, null, LockLevel.None, RecursionType.Full, MergeOptions.None);
    //mergeStatus.noActionNeeded returns FALSE
    

    【讨论】:

    • Jessehouwing 感谢您的快速编辑。有时只是问这个问题而不是永远沉迷于它是阐明一些问题所需要的。这是 StackOverflow!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2021-07-29
    • 2022-10-24
    • 1970-01-01
    相关资源
    最近更新 更多