我在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
进行测试时,我可能已经看到了一些可疑结果,因此我需要了解是否存在需要考虑的差异的原因。
答案 0 :(得分:1)
由于微软通常缺乏全面的文档,我误解了fromVersion
和toVersion
参数,意思是sourceVersion
和targetVersion
(合并"来自& #34;一个分支"到#34;另一个分支),虽然我确实想知道在目标分支中有VersionSpec
的用例是什么,因为你总是会申请它提示。事实证明,fromVersion
和toVersion
似乎可以选择更改集的子集,因此在上面的代码中,VersionSpec
spec变量应该在{toVersion
中使用1}}参数,而不是fromVersion
。 fromVersion = null
意味着合并应该返回到分支中的初始变更集(或者最后记录的合并,可能),而toVersion = null
意味着合并应该使用一切到Tip / most最近的变化。
更新的代码:
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