有没有人知道是否可以对不受源代码管理的文件使用TFS Difference.DiffFiles()方法?我知道当我在源代码控制UI中时,我可以选择让我移动到工作区之外的本地路径。我已经做了一些努力使这个工作,但我不知道如何阅读DiffSegment结果。
options.Flags = DiffOptionFlags.None;
options.OutputType = DiffOutputType.Unified;
options.TargetEncoding = Console.OutputEncoding;
options.SourceEncoding = Console.OutputEncoding;
options.StreamWriter = new StreamWriter(memStream);
options.StreamWriter.AutoFlush = true;
DiffSegment seg = Difference.DiffFiles(pathA, Encoding.UTF8.WindowsCodePage, pathB, Encoding.UTF8.WindowsCodePage, options);
在一些精简测试中,我似乎可以看到添加的段但是OriginalStart似乎与ModifiedStart匹配,所以我可能不想这样做。如果有人对一个体面的Diff API提出建议,我就会打开。
答案 0 :(得分:9)
tfs api绝对允许您比较两个本地文件。我认为您不需要大多数DiffOptionFlags,您可以执行以下操作:
DiffSegment segment = Difference.DiffFiles(
file1,
FileType.Detect(file1, null),
file2,
FileType.Detect(file2, null),
new DiffOptions());
正如穆罕默德简要介绍here。
Russell详细介绍了如何处理DiffSegment here。
例如,我做了以下
do
{
Console.WriteLine(segment.Type + " " + segment.OriginalStart + " " + Segment.OriginalLength);
} while ((segment = segment.Next) != null);
希望这有帮助!
答案 1 :(得分:1)
我认为使用TFS API的答案可能是正确的,但我想我还提到,如果你不想使用Visual Studio启动编码,你可以使用Visual Studio启动的工具API。
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\diffmerge.exe
在VS2012和VS2013中:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\vsDiffMerge.exe
以下是用法:
Compare two files:
diffmerge.exe Original Modified [OriginalLabel] [ModifiedLabel]
[/ignoreeol] [/ignorespace] [/ignorecase] [/noprompt]
Merge three files into fourth file:
diffmerge.exe /merge ServerInputFile LocalInputFile BaseInputFile ResultOutputFile
[ServerInputFileLabel] [LocalInputFileLabel] [BaseInputFileLabel] [/noprompt]
Options:
/merge - merge the files; without /merge, the files will be compared
/ignoreeol - ignore end of line character differences
/ignorespace - ignore differences consisting only of whitespace
/ignorecase - ignore differences in casing
/help - show this help message
/noprompt - use Notepad for showing the diff or merge contents
因此,如果在没有/ merge标志的情况下调用diffmerge.exe,GUI将打开。我不确定这是否是你想要的行为,但我只是想提到它。