首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TFS-SDK:合并不起作用

TFS-SDK:合并不起作用
EN

Stack Overflow用户
提问于 2012-02-22 22:30:45
回答 2查看 1.1K关注 0票数 4

作为更大实现的一部分,我正在尝试使用TFS-SDK实现我的源代码管理分支/文件夹的合并操作。我正在使用TFS2010安装。

我所拥有的是:

代码语言:javascript
复制
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中合并,我会得到几个合并候选者。

如果我执行以下操作,同样的合并候选者也是可见的:

代码语言:javascript
复制
var mergeCandidates = versionControl.GetMergeCandidates(fromPath, toPath,RecursionType.Full).ToList();

我失败了,因为fromPath/toPath都是分支和文件夹-即使是单个文件。

我能找到的唯一资源是this one,它没有帮助...

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-23 17:31:24

Shai Raiten的blog-post拯救了我们!

这失败了:

代码语言:javascript
复制
GetStatus getStatus = myWorkspace.Merge(fromPath, toPath, VersionSpec.Latest, VersionSpec.Latest,
                                                    LockLevel.None, RecursionType.Full, MergeOptionsEx.None);

这成功了:

代码语言:javascript
复制
GetStatus getStatus = myWorkspace.Merge(fromPath, toPath, null, null, LockLevel.None, RecursionType.Full, MergeOptionsEx.None);
票数 5
EN

Stack Overflow用户

发布于 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,您将包含没有约束的所有可用变更集。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9396738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档