Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# tfs命令行';合并';在.NET中等效_C#_.net_Tfs_Tfs Sdk - Fatal编程技术网

C# tfs命令行';合并';在.NET中等效

C# tfs命令行';合并';在.NET中等效,c#,.net,tfs,tfs-sdk,C#,.net,Tfs,Tfs Sdk,编辑:我的问题措辞不当。我试图实现的是“放弃”变更集的合并历史记录 编辑2 我研究了如何从合并候选队列中删除变更集。我并不特别认为这是一个好主意,但我只是为了“完整性”而包含代码 场景:开发人员修复分支上的错误并签入。然后,开发人员修复了主干上的错误,而不是合并(主干发生了巨大的变化,因此没有合并)。但是,当从分支合并到主干时,变更集将显示在列表中。我正在尝试标记此更改集以将其从此列表中删除。这可以使用命令行实用程序通过传递“discard”开关来完成…我正在尝试使用TFS API实现同样的功能

编辑:我的问题措辞不当。我试图实现的是“放弃”变更集的合并历史记录

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

场景:开发人员修复分支上的错误并签入。然后,开发人员修复了主干上的错误,而不是合并(主干发生了巨大的变化,因此没有合并)。但是,当从分支合并到主干时,变更集将显示在列表中。我正在尝试标记此更改集以将其从此列表中删除。这可以使用命令行实用程序通过传递“discard”开关来完成…我正在尝试使用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);

TFS api中有一个合并方法:

也许是这样的:

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

你有任何代码吗?这似乎是答案,除了我不知道如何“放弃”谢谢Philippe-我没有很好地表达最初的问题。我正在尝试放弃变更集。修复程序是手动实现的,不需要合并,我只想将变更集的历史记录标记为已放弃,这样它就不会再出现在列表中。我将编辑我的问题并包含一些代码。我想你的答案肯定是对的。我更了解你的问题,没有好的解决办法。也许最好的方法是从所有分支共有的变更集创建一个修复分支,只包含bug修复,并将该分支与主干和开发分支合并。这样,当您在主干中合并您的开发分支时,您就不会感到烦恼了……谢谢您的帮助。我找到了一种方法,使用合并后签入来获取合并候选列表的变更集。我将编辑OP以包含代码。就个人而言,我不认为我所做的是一个好主意,但我被要求调查并尝试为团队提出解决方案。我也将向团队展示这一点。再次感谢
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);
}