Version control 从TFS中的VersionSpec合并:VersionSpec.Latest无法按预期工作
我在TFS中创建了一个实用程序,用于枚举从源分支到目标分支的更改和冲突。我想为源分支选择性地包括一个Version control 从TFS中的VersionSpec合并:VersionSpec.Latest无法按预期工作,version-control,tfs,tfs-sdk,Version Control,Tfs,Tfs Sdk,我在TFS中创建了一个实用程序,用于枚举从源分支到目标分支的更改和冲突。我想为源分支选择性地包括一个VersionSpec。但是,当我提供如下所示的默认VersionSpec时,我没有得到预期的结果。我使用GUI进行了合并,它显示了19个更改,没有冲突。但在TFSAPI中,它告诉我,如果使用VersionSpec,则不会有任何更改,如图所示 VersionSpec spec = VersionSpec.ParseSingleSpec("T", null) mergeStatus = worksp
VersionSpec
。但是,当我提供如下所示的默认VersionSpec
时,我没有得到预期的结果。我使用GUI进行了合并,它显示了19个更改,没有冲突。但在TFSAPI中,它告诉我,如果使用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
进行测试时可能已经看到了一些可疑的结果,因此,我需要了解是否存在我需要解释的差异的原因。由于Microsoft通常缺乏完整的文档,我将fromVersion
和toVersion
参数误解为源版本
和目标版本
(从“一个分支”合并到另一个分支),虽然我确实想知道在目标分支中有一个VersionSpec
的用例会是什么,因为您总是将它应用于技巧。事实证明,fromVersion
和toVersion
似乎是用来选择变更集的子集的,因此在上面的代码中,VersionSpec
spec变量应该用在toVersion
参数中,而不是fromVersion
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
谢谢你的快速编辑。有时候,仅仅是问问题而不是永远纠缠在问题上,这才是让人有所了解的必要条件。为你干杯!