tfs命令行'merge'在.NET中等效

时间:2013-05-28 12:00:22

标签: c# .net tfs tfs-sdk

编辑:我的问题写得不好。我想要实现的是“丢弃”变更集的合并历史记录

编辑2 我弄清楚如何从合并候选队列中删除变更集。我并不特别认为这是一个好主意,但我只是为了“完整”而将代码包括在内。

SCENARIO:开发人员修复了分支机构上的错误并进行了检查。然后,开发人员修复了主干上的错误而不是合并(后备箱发生了巨大变化,因此没有合并)。但是,当从分支合并到主干时,更改集将显示在列表中。我正在尝试标记此更改集以将其从此列表中删除。这可以通过传递'discard'开关使用命令行实用程序来完成...我正在尝试使用TFS API实现相同的目的。

我认为我非常接近使用Merge方法,但我不确定传入的选项。我不想执行合并只是想将变更集标记为合并而不合并

使用Winforms应用程序从TFS获得了一个变更集列表,并希望能够通过使用C#调用discard来合并变更集

合并命令为here

可以使用TFS .NET库完成,还是必须从winforms应用程序调用命令行编辑器?

//get the merge candidates
IEnumerable<MergeCandidate> mergeCandidates =
                _vcs.GetMergeCandidates(cboSource.Text, cboTarget.Text, RecursionType.Full)
                    .OrderByDescending(x => x.Changeset.ChangesetId)
                    .AsEnumerable();


//user select a changeset from a grid and then I want to discard this changeset from the //'merge list'

 string _changeset = grdChangeSets.CurrentRow.Cells[0].Value.ToString();
            VersionSpec vfrom = VersionSpec.ParseSingleSpec(_changeset, null);
            VersionSpec vto = VersionSpec.ParseSingleSpec(_changeset,null);
            _workspaces[0].Merge(cboSource.Text, cboTarget.Text, vfrom, vto, LockLevel.None, RecursionType.Full,
                                 MergeOptions.AlwaysAcceptMine);

编辑2代码

string _changeSetId = grdChangeSets.CurrentRow.Cells[0].Value.ToString();


            VersionSpec vfrom = VersionSpec.ParseSingleSpec(_changeSetId, null);
            VersionSpec vto = VersionSpec.ParseSingleSpec(_changeSetId, null);


            UsiWorkspace wksp = new UsiWorkspace();
            wksp.ResolveConflicts(_workspaces[0]);

            GetStatus getStatus = _workspaces[0].Merge(cboSource.Text,
                cboTarget.Text, 
                vfrom, 
                vto, 
                LockLevel.None, 
                RecursionType.Full, 
                MergeOptions.AlwaysAcceptMine);


var _conflicts = workspaces[0].QueryConflicts(null, true);
            foreach (Conflict conflict in _conflicts)
            {
                conflict.Resolution = Resolution.DeleteConflict;
                workspace.ResolveConflict(conflict);
            }



            var wip = new WorkspaceCheckInParameters(_workspaces[0].GetPendingChanges(),string.Format("CHECKED IN FROM TFS TOOL - {0} {1}", DateTimeOffset.Now.ToString(), Environment.UserName))
                {

                    OverrideGatedCheckIn = ((CheckInOptions2) _vcs.SupportedFeatures & CheckInOptions2.OverrideGatedCheckIn) ==
                        CheckInOptions2.OverrideGatedCheckIn,
                    PolicyOverride = new PolicyOverrideInfo("CHECKED IN FROM TFS TOOL - POLICY", null)
                };

            _workspaces[0].CheckIn(wip);

1 个答案:

答案 0 :(得分:3)

TFS api中有一个合并方法:http://msdn.microsoft.com/en-us/library/ff731634.aspx

也许是这样的:

var status = _workspace.Merge(sourceTfsPath, targetTfsPath, null, null, LockLevel.None, RecursionType.Full,
    MergeOptions.AlwaysAcceptMine);
Trace.WriteLine(status.NumOperations);
var conflicts = _workspace.QueryConflicts(null, true);
foreach (var conflict in conflicts)
{
    conflict.Resolution = Resolution.AcceptYours;
    _workspace.ResolveConflict(conflict);
}