为什么Workspace.QueryConflicts不起作用?

时间:2013-12-15 06:27:28

标签: c# .net tfs

我想检查整个TFS中的分支之间是否存在代码冲突。似乎Workspace.QueryConflicts不起作用,因为当我尝试使用tf.exe合并代码时,它不返回任何冲突。

所以,我使用Workspace.Merge进行实验,看看我是否可以在两个分支之间合并代码,并且它说我不能,因为存在代码冲突,请参阅下面的代码以供参考。

private static bool CheckMerge2(string branchFrom, string branchTo)
{
    if (branchFrom == branchTo ||
        !branchFrom.Contains("Common") ||
        !branchTo.Contains("Common"))
    {
        return true;
    }
    else
    {
        Console.WriteLine("Can merge from '{0}' to '{1}'?", branchFrom, branchTo);

        using (var projectCollection = new TfsTeamProjectCollection(new Uri(collection), windowsCredential))
        {
            // get the source code control service. 
            var sourceControl = projectCollection.GetService<VersionControlServer>();
            var workspace = sourceControl.GetWorkspace(@"E:\my_location\"); // Common\Master");

            try
            {
                GetStatus getStatus = workspace.Merge(branchFrom, branchTo, null, null, LockLevel.None, RecursionType.Full, MergeOptions.NoMerge);

                Console.WriteLine("Number of conflicts is {0}", getStatus.NumConflicts);

                if (getStatus.NumConflicts > 0)
                {
                    var conflicts = workspace.QueryConflicts(new string[] { branchTo }, true);

                    foreach (var conflict in conflicts)
                    {
                        Console.WriteLine("This line will never hit");
                        Console.WriteLine(conflict.GetFullMessage());
                    }
                }

            }
            catch
            {

            }

            return true;
        }
    }
}

针对我的TFS的结果如下:

enter image description here

正如您所看到的,它表示1次冲突,但没有打印出冲突消息。如果我做错了什么或者它是.NET Framework上的错误,我很好奇吗?

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,发现如果你使用MergeOptions.NoMerge是workspace.Merge,则workspace.QueryConflicts将返回0冲突。

但是如果你把它改成任何其他值,比如MergeOptions。

没有,你会在workspace.QueryConflicts。

中得到结果

答案 1 :(得分:0)

使用“无合并选项”是正常的,您的工作区不包含更改或冲突。

使用“ None”选项代替,我建议您使用MergeOptionsEx类(而不是常规的mergeOptions)->常规的mergeOptions不会自动解决更改,即使有更改,您也将获得“冲突”状态没有冲突。

在Powershell中也不起作用:

$conflicts = $workspace.QueryConflicts([string[]] {$TFSTargetLocation}, $true);

但是这样做:

$conflicts = $workspace.QueryConflicts($TFSTargetLocation, $true);

我正在使用TFS 2010,所以也许这就是原因