TFS API 二次开发(创建,删除分支,打标签,顺便带上commont)
因为维护一个项目,需要拉取app,service,client 多个项目,所以自己在空余时间做了个小工具,一次操作,把多个项目同时分支,并打上同一个标签。
下面帖上,部分比较重要的代码。
step 1.需要获取TFS的数据源,工作空间,和版本控制
1 Uri targetUri = new Uri(tfsurl); tfsurl是tfs 里的文件存放地址 2 TfsTeamProjectCollection server = new TfsTeamProjectCollection(targetUri); 3 WorkItemStore workstore = server.GetService<WorkItemStore>(); 4 5 TfsTeamProjectCollection projectCollection = new TfsTeamProjectCollection(targetUri); 6 VersionControlServer versionControl = projectCollection.GetService<VersionControlServer>();
step2.获取itemlist(tfs每个文件的属性)
1 ItemSpec itemSpec = new ItemSpec(targetUrl, RecursionType.OneLevel); 2 ItemSet itemSet = versionControl.GetItems(itemSpec, VersionSpec.Latest, DeletedState.NonDeleted, ItemType.Any,false); 3 List<Item> lstItem = itemSet.Items.ToList();
step3.创建分支(顺便带上comment,turl 为创建分支的目标地址)
1 if (!versionControl.ServerItemExists(tUrl, VersionSpec.Latest, DeletedState.NonDeleted, ItemType.Any)) 2 { 3 versionControl.CreateBranch(tfsSource, tUrl, VersionSpec.Latest, null, branchComment, null, null, null); 4 }
step4.打上标签
1 VersionControlLabel versionControlLabel = new VersionControlLabel(versionControl, txtInitLabel.Text, null, lUrl, txtInitLabel.Text); 2 ItemSpec itemSpec = new ItemSpec(lUrl + "/" + item, RecursionType.Full); 3 var labelItemSpec = new LabelItemSpec[1]; 4 labelItemSpec[0] = new LabelItemSpec(itemSpec, VersionSpec.Latest, false); 5 versionControl.CreateLabel(versionControlLabel, labelItemSpec, LabelChildOption.Merge)
step5.删除分支(需要先get文件,然后删除,最后check in)
Uri targetUri = new Uri(tfsurl); TfsTeamProjectCollection server = new TfsTeamProjectCollection(targetUri); WorkItemStore workstore = server.GetService<WorkItemStore>(); TfsTeamProjectCollection projectCollection = new TfsTeamProjectCollection(targetUri); VersionControlServer versionControl = projectCollection.GetService<VersionControlServer>(); String workspaceName = txtwsName.Text.Trim(); Workspace workspace = versionControl.GetWorkspace(workspaceName, versionControl.AuthorizedUser); string filePath = string.Empty; string serverFolder = xxxxx; filePath = Path.Combine(txtPath.Text, GetFolderName(serverFolder)); if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } GetRequest request = new GetRequest(new ItemSpec(serverFolder, RecursionType.Full), VersionSpec.Latest); WorkingFolder workingFolder = new WorkingFolder(serverFolder, filePath); workspace.CreateMapping(workingFolder); workspace.Get(request, GetOptions.GetAll | GetOptions.Overwrite); VersionSpec versionSpec = new ChangesetVersionSpec(Convert.ToInt32(gvBranchList.Rows[i].Cells["ItemId"].Value)); workspace.PendDelete(filePath); var pendingList = new List<PendingChange>(workspace.GetPendingChanges()); deletedCount = workspace.CheckIn(pendingList.ToArray(), "BranchTools deleted"); }
因为 vs自带的tfs 十分的方便,网上很少有这一份的资料,我就发了些简单的关键代码上来,如果有问题,欢迎大家留言交流。

浙公网安备 33010602011771号