我有一段C#代码可以自动执行某些TFS服务器(12.0.31101.0 Tfs2013.Update4)版本控制操作。 其中之一是从BranchA到BranchB的合并。 我想将BranchA用作“真相”,所有冲突都可以通过使用BranchA中的最新版本来解决。
目前我的合并如下:
GetStatus status = workspace.Merge(sourceBranch,
destinationBranch,
versionSpec,
null,
LockLevel.None,
RecursionType.Full,
MergeOptions.None);
然后我从状态对象中获取status.NumConflicts。
if (workspace.GetPendingChanges().Length > 0)
{
if (conflictsFound)
{
ConsoleHelper.WriteLine(numberOfConflicts + " merge conflicts found! Conflicts will be resolved by using the source branch.", ConsoleColor.Cyan);
Conflict[] objConflicts = workspace.QueryConflicts(new string[] { destinationBranch }, true);
foreach (Conflict objConflict in objConflicts)
{
objConflict.Resolution = Resolution.AcceptTheirs; //This will force the take source option
workspace.ResolveConflict(objConflict);
ConsoleHelper.WriteLine("File : " + objConflict.YourServerItemSource, ConsoleColor.Gray);
}
ConsoleHelper.WriteLine("All merge conflicts encountered were resolved.", ConsoleColor.Green);
}
TFSCommit tfsCommit = new TFSCommit();
checkinStatus = tfsCommit.CheckIn(workspace, workItem, out checkinChangeSet);
}
然后我遍历Conflicts对象并使用Resolution.AcceptTheirs
选项。
在测试环境中,这工作正常,但我现在碰到TF14121:
失败代码:
MergeEditDeleteException |消息: TF14121 :先前对$ / Development / Dictionaries / FileA.dict进行的尚未合并的更改将通过合并删除$ / Development / Dictionaries / FileA.dict来丢弃。
我正试图找到一种方法来告诉API“忽略”冲突并使用BranchA作为源。
有解决方法吗?
答案 0 :(得分:1)
所以我找到了问题的根源。在我的代码中,我根据GetStatus对象的NumFailures属性中的结果确定了合并的成功。 我完全像Vicky所说的创建了这个场景,这确实触发了TF14121 - 再次感谢@Vicky!事实证明这确实是一个警告,仅此而已。
有趣的是,当触发TF14121时,它在GetStatus对象(A)中被注册为失败(B)。但是,当您检查GetStatus对象中的失败集合并查看失败的Severity属性(C)时,您将看到它的类型为 SeverityType.Warning 。如果您继续办理登机手续,它可以正常工作。
最重要的是,仅查看status.NumFailures以确定是否存在故障,可能不是最佳方式。
答案 1 :(得分:0)
TF14121消息出现在以下情况中:在您的方案中(从BranchA合并到BranchB),首先在BranchA中对 FileA.dict 进行了一些更改并且已签入,名为的变更集例如生成C5;然后删除并签入 FileA.dict 文件,生成名为C6的变更集。现在,当从BranchA合并到BranchB时,将显示TF14121警告消息。
您可以先取消删除FileA.dict文件并再次合并。如果您仍希望在合并期间删除FileA.dict文件,则需要处理此异常,并检查合并挂起的更改:
workspace.CheckIn(workspace.GetPendingChanges(), "Branch Merge Checkin");