解决TFS API中的合并冲突

时间:2014-02-27 02:41:26

标签: tfs tfs2010 tfs2012 tfs-sdk tfs2013

我正在尝试解决与TFS API的合并冲突,并且正在努力解决。我的问题如下:

  1. 从主干合并 - >分支
  2. 合并期间发生冲突(两者中编辑的文件的同一行)
  3. 此时我只想提供自己的文本,看看合并后的文件应该是什么样子,然后将其标记为已解决。
  4. 我无法弄清楚如何做到这一点。请参阅以下代码:

    // merge was performed and there are conflicts to resolve
    Conflict[] conflicts = ws.QueryConflicts(new string[] {"$/ProjectName/solution/"}, true);
    Console.WriteLine(" - Conflicts: {0}", conflicts.Count());
    
    if (conflicts.Any())
    {
        Console.WriteLine(" - Resolving conflicts");
    
        // There are conflicts to deal with
        foreach (Conflict conflict in conflicts)
        {
            // Attempt to perform merge internally
            ws.MergeContent(conflict, false);
    
            if (conflict.ContentMergeSummary.TotalConflicting > 0)
            {
                // Conflict was not resolved
                // Manually resolve  
                // PROBLEM IS HERE <--------------
                var allLines = File.ReadAllLines(conflict.TargetLocalItem).ToList();
                allLines.Add("This is the MANUAL merge result");
                File.WriteAllLines(conflict.TargetLocalItem, allLines.ToArray());
            }
    
            //conflict was resolved
            conflict.Resolution = Resolution.AcceptMerge;
            ws.ResolveConflict(conflict);
        }
    }
    
    Checkin(ws, "Merge comment");
    Console.WriteLine("Done");
    

    正如您所看到的,我正在尝试手动编辑目标文件,但这不起作用。我似乎无法弄清楚我应该在conflict对象上编辑哪个文件来手动执行合并。

    一位评论者要求我详细说明上述代码的问题:

    1. 在评论“问题就在这里”时,目标文件上还有一个只读标志,因此我无法编辑该文件。
    2. 如果我用一些代码删除readonly标志并继续代码,结果文件不包含我的新行,但包含带有所有注释的diff样式文本。如果不是,我可以详细说明有意义。
    3. 如果我对TargetLocalItem进行编辑,则不执行任何操作。没有编辑。
    4. 这告诉我在本地工作区中编辑目标文件不是正确的操作。
    5. 基本上我试图模仿外部工具的功能,但我的程序将是外部工具并提供合并文本。

1 个答案:

答案 0 :(得分:0)

试试这个

string tmpOutFile = Path.GetTempFileName();    
conflict.MergedFileName = tmpOutFile;                                   
// do stuff with tmpOutFile
conflict.Resolution = Resolution.AcceptMerge;
ws.ResolveConflict(conflict);