2013-05-28 99 views
1

编辑:我的问题措辞不佳。我想实现是“丢弃”我制定了我怎么才能把合并候选队列中的变更的变更在.NET中tfs命令行'合并'

EDIT 2 的合并历史。我并不特别认为这是一个好主意,但我只是为了“完整性”而包含代码。

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

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

已经从TFS获得了使用Winforms应用程序的变更集列表,并希望能够合并变更通过使用C#要求它丢弃

合并命令是here

可以T他可以使用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); 

EDIT 2 CODE

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

你有任何代码? – Romoku

回答

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); 
} 
+0

这似乎是答案,但我不明白我怎么可以'丢弃' – kurasa

+0

我编辑了一些可以帮助你的东西... – Philippe

+0

感谢菲利普 - 我还没有措辞的原始问题很好。我正试图放弃变更集。此修复程序已手动实施,无需合并,我只想将变更集的历史记录标记为已废弃,以便它不再在列表中弹出。我将编辑我的问题并包含一些代码。我认为你的答案肯定是正确的方式 – kurasa