一个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 == )
{
ws = version.CreateWorkspace(worksapce);//创建工作区
}
else
{
ws = wss[];
}
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[];
itemSpecs[] = 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[];
itemSpecs[] = 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 += "\r\n";
msg += e.Exception.StackTrace;
MessageBox.Show(msg);
}

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

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

 PendingChange[] pcs = ws.GetPendingChanges();
ws.Undo(pcs);//其有重载可以指定RecursionType(递归类型)和updateDisk 是否更新硬盘

TFS二次开发06——签入(CheckIn)的更多相关文章

  1. TFS二次开发系列索引

    TFS二次开发11——标签(Label) TFS二次开发10——分组(Group)和成员(Member) TFS二次开发09——查看文件历史(QueryHistory) TFS二次开发08——分支(B ...

  2. TFS二次开发05——下载文件(DownloadFile)

    前面介绍了怎样读取TFS上目录和文件的信息,怎么建立服务器和本地的映射(Mapping). 本节介绍怎样把TFS服务器上的文件下载到本地. 下载文件可以有两种方式: using Microsoft.T ...

  3. TFS二次开发-基线文件管理器(5)-源码文件的读取

      在上一节中,我们在保存标签之前,已经将勾选的文件路径保存到了Listbox中,这里只需要将保存的数据输出去为txt文档就可以做版本控制了.   版本文件比较复杂的是如何读取,也就是如何通过文件路径 ...

  4. TFS二次开发系列:三、TFS二次开发的第一个实例

    首先我们需要认识TFS二次开发的两大获取服务对象的类. 他们分别为TfsConfigurationServer和TfsTeamProjectCollection,他们的不同点在于可以获取不同的TFS ...

  5. TFS二次开发、C#知识点、SQL知识总结目录

    TFS二次开发系列 TFS二次开发系列:一.TFS体系结构和概念 TFS二次开发系列:二.TFS的安装 TFS二次开发系列:三.TFS二次开发的第一个实例 TFS二次开发系列:四.TFS二次开发Wor ...

  6. TFS二次开发系列:七、TFS二次开发的数据统计以PBI、Bug、Sprint等为例(一)

    在TFS二次开发中,我们可能会根据某一些情况对各个项目的PBI.BUG等工作项进行统计.在本文中将大略讲解如果进行这些数据统计. 一:连接TFS服务器,并且得到之后需要使用到的类方法. /// < ...

  7. TFS二次开发的数据统计以PBI、Bug、Sprint等为例(一)

    TFS二次开发的数据统计以PBI.Bug.Sprint等为例(一) 在TFS二次开发中,我们可能会根据某一些情况对各个项目的PBI.BUG等工作项进行统计.在本文中将大略讲解如果进行这些数据统计. 一 ...

  8. TFS二次开发、C#知识点、SQL知识

    TFS二次开发.C#知识点.SQL知识总结目录   TFS二次开发系列 TFS二次开发系列:一.TFS体系结构和概念 TFS二次开发系列:二.TFS的安装 TFS二次开发系列:三.TFS二次开发的第一 ...

  9. TFS二次开发02——连接TFS

    在上一篇<TFS二次开发01——TeamProjectsPicher>介绍了  TeamProjectsPicher 对象,使用该对象可以很简单的实现连接TFS. 但是如果我们要实现自定义 ...

随机推荐

  1. c#POST请求php接口

    POST请求php接口 /// <summary> /// 指定Post地址使用Get 方式获取全部字符串 /// </summary> /// <param name= ...

  2. WCF+Nhibernate循环引用导致序列化的问题

    WCF+Nhibernate 在查询中只要涉及到表关联,都会存在一个循环引用而导致客户端不能反序列化的问题. 解决的办法: 1.多对一关联中,设置lazy="false". 2.一 ...

  3. linux-ubuntu14.04以下使用gdb出现的问题

    问题: (gdb) list 没有符号表被读取. 请使用 "file" 命令. 原因事实上说的比較清楚,可运行文件里没有符号表,为什么会没有符号表呢.由于符号表是在编译过程中使用的 ...

  4. SpringBoot------集成PageHelper分页功能

    添加MyBatis的代码,地址 https://www.cnblogs.com/tianhengblogs/p/9537665.html 修改以下部分: 1.添加MyBatisConfig packa ...

  5. 利用函数来得到所有子节点号& 利用函数来取得最高级的节点号

    在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点.但很遗憾,在MySQL的目前版本中还没有对应的功能. ...

  6. Bypass X-WAF SQL注入防御(多姿势)

    0x00 前言 ​ X-WAF是一款适用中.小企业的云WAF系统,让中.小企业也可以非常方便地拥有自己的免费云WAF. ​ 本文从代码出发,一步步理解WAF的工作原理,多姿势进行WAF Bypass. ...

  7. [C] 如何使用头文件 .h 编译 C 源码

    在 C 语言中,头文件或包含文件通常是一个源代码文件,程序员使用编译器指令将头文件包含进其他源文件的开始(或头部),由编译器在处理另一个源文件时自动包含进来. 一个头文件一般包含类.子程序.变量和其他 ...

  8. 《转》win7 安装ujson 出现的“error: Microsoft Visual C++ 9.0 is required. Get it from http://aka.ms/vcpython27”

    本文转载自http://blog.csdn.net/Tilyp/article/details/72842800?locationNum=2&fps=1 我的python环境是 D:\work ...

  9. Django restframwork教程之类视图(class-based views)

    我们也可以使用类的views写我们的API,我们将看到这是一个强大的模式,允许我们重用公共功能,让我们的代码整洁 使用Class-based Views重新改写我们的API 打开views.py文件, ...

  10. Linux设备驱动剖析之SPI(三)

    572至574行,分配内存,注意对象的类型是struct spidev_data,看下它在drivers/spi/spidev.c中的定义: struct spidev_data { dev_t de ...