【问题标题】:How to create a new source code branch using TFS API?如何使用 TFS API 创建新的源代码分支?
【发布时间】:2014-12-03 15:34:59
【问题描述】:

我正在尝试使用 API 创建一个新分支,并且同时使用了 PendBranch()CreateBranch()CreateBranch() 的问题是它立即提交,我希望能够在签入分支时添加 cmets。所以,我所做的如下所示。

基本上,我从我的 Windows 应用程序中获取所有信息,例如要映射的服务器项和本地项,以及分支的源和目标。

不知何故,当我看到源代码管理资源管理器时,它仍然显示 “未映射”,即使我在创建工作区后给出了:workspace.Get()workspace.Map(serverItem,localItem)

有人能解释一下吗?

public void CreateNewBranch(string server,string serverItem,string localItem,string sourceBranch, string targetBranch)
    {
        int changeSetNumber = 0;
        // Get a reference to Team Foundation Server and Source Control.
        tfs = GetTFS(server);
        // Create a new workspace for the currently authenticated user.             
      workspace = tfvc.CreateWorkspace("Example Workspace", tfvc.AuthenticatedUser);
        }
        // Create a mapping to the project.
        try
        {
           workspace.Map(serverItem, localItem);

            // Get the latest source files from the repository.
            //workspace.Get();

            // Perform a pending Branch operation. 
            workspace.PendBranch(sourceBranch, targetBranch, VersionSpec.Latest);
            // Get a list of all the Pending Changes.
            PendingChange[] pendingChanges = workspace.GetPendingChanges();
            if (pendingChanges.Length > 0)
            {
                changeSetNumber = workspace.CheckIn(pendingChanges, "Comment:Branch Created");
                MessageBox.Show("Checked in changeset # " + changeSetNumber);
            }
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
        finally
        {
            // Cleanup the workspace.
            workspace.Delete();
        }
    }

【问题讨论】:

    标签: api version-control tfs branch new-operator


    【解决方案1】:

    在 TFS 变更集中 cmets 实际上是可编辑的。因此,您可以尝试使用 VS2008/TFS2008 SP1 中引入的 CreateBranch 方法,如下所示:

    public void CreateBranchWithComment(
        string serverUrl, 
        string sourcePath, 
        string targetPath, 
        string comment)
    {
        TeamFoundationServer tfs = new TeamFoundationServer(serverUrl);
        VersionControlServer vcServer = 
            (VersionControlServer)tfs.GetService(typeof(VersionControlServer));
    
        int changesetId = vcServer.CreateBranch(
            sourcePath, 
            targetPath, 
            VersionSpec.Latest);
    
        Changeset changeset = vcServer.GetChangeset(changesetId);
        changeset.Comment = comment;
        changeset.Update();
    
    }
    

    【讨论】:

    • 就像它说的那样——新的分支不会下载到你的本地磁盘,直到你创建一个工作区让它存在,然后让 TFS 实际执行下载。省略这些额外的步骤是 Martin 的解决方案更简单、更快捷的原因。当然,如果您需要本地副本,则无法绕过它们。
    猜你喜欢
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 2017-06-09
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    相关资源
    最近更新 更多