作为更大实现的一部分,我正在尝试使用TFS-SDK实现我的源代码管理分支/文件夹的合并操作。我正在使用TFS2010安装。
我所拥有的是:
using System;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;
using Microsoft.TeamFoundation.VersionControl.Common;
namespace MergeBranchesFolders
{
class Program
{
static void Main()
{
TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://TFSSERVER/Collection"));
var versionControl = teamProjectCollection.GetService<VersionControlServer>();
const string fromPath = "$/TeamProject/SourceDir";
const string toPath = "$/TeamProject/TargetDir";
Workspace myWorkspace = versionControl.GetWorkspace("WorkspaceName", "WorkspaceOwner");
GetStatus getStatus = myWorkspace.Merge(fromPath, toPath, VersionSpec.Latest, VersionSpec.Latest,
LockLevel.None, RecursionType.Full, MergeOptionsEx.None);
}
}
}我确信我可以正确地访问myWorkspace,但是getStatus看起来是这样的:

这很大程度上说明什么都没有发生。
然而,如果我尝试在IDE中合并,我会得到几个合并候选者。
如果我执行以下操作,同样的合并候选者也是可见的:
var mergeCandidates = versionControl.GetMergeCandidates(fromPath, toPath,RecursionType.Full).ToList();我失败了,因为fromPath/toPath都是分支和文件夹-即使是单个文件。
我能找到的唯一资源是this one,它没有帮助...
发布于 2012-02-23 17:31:24
Shai Raiten的blog-post拯救了我们!
这失败了:
GetStatus getStatus = myWorkspace.Merge(fromPath, toPath, VersionSpec.Latest, VersionSpec.Latest,
LockLevel.None, RecursionType.Full, MergeOptionsEx.None);这成功了:
GetStatus getStatus = myWorkspace.Merge(fromPath, toPath, null, null, LockLevel.None, RecursionType.Full, MergeOptionsEx.None);发布于 2014-03-26 10:58:25
虽然到Shai Raiten的博客的链接被证明是有帮助的,但在上面的答案中,更改的原因并不是非常清楚,在Shai的博客中(或者在Microsoft's documentation中)也没有非常清楚地说明。这里的关键在于fromVersion和toVersion的含义。似乎这个问题的作者犯了和我一样的错误,误解了这些参数的含义。在我的例子中,我将"from“和" to”分别理解为对合并的源(起点)和目标(终点)的引用。虽然我不明白为什么在这种情况下必须指定" to“版本,因为为了真正进行有意义的合并,目标的版本必须始终是Tip。因此,将参数描述理解为“开始”和“结束”版本并不会让我觉得与这种解释不一致。
我最终明白的是,在这种情况下,"from“和" to”都是指合并的源,其中"from“是指一系列变更集的起点,而" to”是指一系列变更集的终点。如果您省略了"fromVersion“参数,则表示您希望包含所有更改集,直到开始(或最后记录的合并),否则,您表示希望仅包含最早到指定版本的更改集。如果您省略了"toVersion“,那么您就是在说您想要包含Tip版本之前的所有变更集,否则您就是在说您只想包含到指定版本为止的变更集。
因此,在将fromVersion和toVersion参数都指定为VersionSpec.Latest的原始代码中,您表示希望合并发生在最新版本和最新版本之间的所有变更集,根据定义,最新版本不包含任何更改。但是,在修改后的代码中,如果为两个参数都指定了null,您将包含没有约束的所有可用变更集。
https://stackoverflow.com/questions/9396738
复制相似问题