• TFS二次开发06——签入(CheckIn)


    一个Item 就是一个文件或文件夹

    using Microsoft.TeamFoundation.Client;

    using Microsoft.TeamFoundation.VersionControl.Client;

    一:添加Item

    //连接到TFS服务器
    string tpcURL = "http://127.0.0.1:8080/tfs/";
    TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(tpcURL));
    VersionControlServer version = tpc.GetService(typeof(VersionControlServer)) as VersionControlServer;
    //创建工作区(Worksapce),如果已经存在就不创建
    string worksapce = "WorkSpaceTest01";
    Workspace ws;
    Workspace[] wss = version.QueryWorkspaces(worksapce, Environment.UserName, Environment.MachineName);//查询工作区
    if (wss.Length == 0)
    {
        ws = version.CreateWorkspace(worksapce);//创建工作区
    }
    else
    {
       ws = wss[0];
    }
    string serverPath = "$/SYS/Application1/Application1.sln";
    string localPath = "E:\SYS\Application1\Application1.sln";
    ws.Map(serverPath, localPath);//添加映射
    int pend = ws.PendAdd(localPath);//告诉我你是要给“localPath” 做“Add” 操作。 pend==1 表示可以添加,pend==0 表示之前已经添加过了 或者 操作失败        
    ItemSpec[] itemSpecs = new ItemSpec[1];
    itemSpecs[0] = new ItemSpec(localDir, RecursionType.Full);
    WorkspaceCheckInParameters wscip = new WorkspaceCheckInParameters(itemSpecs, "注释内容");
    int changeSetId = ws.CheckIn(wscip);//签入。如果签入失败changeSetId==-1;反之,返回变更集,大于0的整数

    运行以上代码,效果如下图所示:

     

    可以看出不但成功添加了Application1.sln 文件,并且在TFS上建立了相应的文件夹Application1 ,无需我们事先做“添加文件夹”的操作。

    二 :删除、编辑、重命名等  Item

    //删除Item
    int pend = ws.PendDelete(localPath);
    //编辑Item
    int pend = ws.PendEdit(localPath);
    //重命名
    Int pend= ws.PendRename(oldPath,newPath);
    ItemSpec[] itemSpecs = new ItemSpec[1];
    itemSpecs[0] = new ItemSpec(localDir, RecursionType.Full);
    WorkspaceCheckInParameters wscip = new WorkspaceCheckInParameters(itemSpecs, "注释内容");
    int changeSetId = ws.CheckIn(wscip);//签入。如果签入失败changeSetId==-1;反之,返回变更集,大于0的整数
    //执行CheckIn也可以:
    PendingChange[] pcs = ws.GetPendingChanges();
    int changeSetId= ws.CheckIn(pcs,"注释内容");  
    
    //类似的操作还有:
    PendBranch(string sourcePath, string targetPath, VersionSpec version);//分支
    PendUndelete(string path, int deletionId);//取消删除

    三:NonFatalError

    前面讲到

    ws.PendAdd(localPath)

    ws.PendDelete(localPath);

    ws.PendEdit(localPath);

    ......

    等等 都会 返回一个1或者0,1表示可以执行操作,0表示执行失败或者之前已经执行过该操作了。

    那么如果返回0 ,我们想要知道到底为什么失败呢, 

    这里我们要使用VersionControlServer 的NonFatalError 事件:

    version.NonFatalError += version_NonFatalError;
    void version_NonFatalError(object sender, ExceptionEventArgs e)
    {
       if (e.Exception == null)
       {
           return;
       }
       string msg = e.Exception.Message;
       msg += "
    ";
       msg += e.Exception.StackTrace;
       MessageBox.Show(msg);
    }

    这样,如果因为其中发生了异常而返回0 ,就可以显示出异常信息。

    四:撤销挂起的变更(Undo)

     PendingChange[] pcs = ws.GetPendingChanges();
     ws.Undo(pcs);//其有重载可以指定RecursionType(递归类型)和updateDisk 是否更新硬盘
  • 相关阅读:
    DateTime.now()用法
    C#中静态类详述
    面向对象详述
    解决Github打不开问题
    git 提交代码流程 先暂存 在提交+备注 然后拉取代码获取最新的代码 然后再推送 git push
    常用
    样式重置
    Html 5优化
    理解js闭包
    css 倒计时 svg
  • 原文地址:https://www.cnblogs.com/xumingxiang/p/3110250.html
Copyright © 2020-2023  润新知