我想检查整个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的结果如下:
正如您所看到的,它表示1次冲突,但没有打印出冲突消息。如果我做错了什么或者它是.NET Framework上的错误,我很好奇吗?
答案 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,所以也许这就是原因