作为更大实现的一部分,我正在尝试使用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一个,它没有不帮......
答案 0 :(得分:5)
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);
答案 1 :(得分:4)
虽然与Shai Raiten博客的链接证明是有帮助的,但上述答案中没有明确说明改变的原因,也没有在Shai的博客中明确说明(或在Microsoft's documentation就此而言)。这里的关键是fromVersion和toVersion的含义。这个问题的作者似乎犯了同样的错误,误解了这些参数的含义。就我而言,我理解&#34;来自&#34;和&#34;到&#34;分别引用合并的源(起始点)和目标(终点)。虽然我不明白为什么要指定&#34; to&#34;在这种情况下的版本,因为为了实际进行有意义的合并,目标的版本总是必须是提示。因此,将参数描述读作&#34;开始&#34;和&#34;结束&#34;版本没有让我觉得与这种解释不一致。
我最终明白的是,在这种情况下,&#34;来自&#34;和&#34;到&#34;是两个引用合并的源,其中&#34;来自&#34;指的是一系列变更集的起始点,&#34;到&#34;指的是一系列变更集的结束点。如果你省略&#34; fromVersion&#34;参数然后你说你想要包括所有变更集一直回到开头(或最后记录的合并),否则你说你只想包括远远超过指定版本的变更集。如果省略&#34; toVersion&#34;那么你说你想要包括所有变更集,直到Tip版本,否则你说你想要只包括指定版本的变更集。
因此,在原始代码中同时将fromVersion和toVersion参数指定为VersionSpec.Latest,您要说的是要合并最新版本和最新版本之间发生的所有更改集,根据定义,它们不包含任何更改。但是,在修改后的代码中,如果为两个参数指定了null,则包括所有可用的没有约束的变更集。