编辑:我的问题措辞不佳。我想要实现的是“丢弃”变更集的合并历史
编辑 2 我想出了如何从合并候选队列中删除变更集。我并不特别认为这是一个好主意,但我只是为了“完整性”而包含代码。
场景:开发人员修复分支上的错误并签入。开发人员然后修复主干上的错误而不是合并(主干发生了巨大变化,因此没有合并)。但是,从分支合并到主干时,变更集会出现在列表中。我正在尝试标记此变更集以将其从此列表中删除。这可以通过传递“丢弃”开关使用命令行实用程序来完成......我正在尝试使用 TFS API 来实现相同的目标......
我认为我非常接近使用 Merge 方法,但不确定要传入的选项。我不想执行合并只想将变更集标记为已合并而不合并
已经使用 Winforms 应用程序从 TFS 获得了变更集列表,并且希望能够通过使用 C# 调用 discard 来合并变更集
合并命令在这里
这可以使用 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);