编辑:我的问题写得不好。我想要实现的是“丢弃”变更集的合并历史记录
编辑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);
答案 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);
}