Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Version control 从TFS中的VersionSpec合并:VersionSpec.Latest无法按预期工作_Version Control_Tfs_Tfs Sdk - Fatal编程技术网

Version control 从TFS中的VersionSpec合并:VersionSpec.Latest无法按预期工作

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

我在TFS中创建了一个实用程序,用于枚举从源分支到目标分支的更改和冲突。我想为源分支选择性地包括一个
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

谢谢你的快速编辑。有时候,仅仅是问问题而不是永远纠缠在问题上,这才是让人有所了解的必要条件。为你干杯!