Diff'ing с использованием TFS API
Кто-нибудь знает, можно ли использовать методы TFS Difference.DiffFiles() для файлов, которые не находятся под контролем источника? Я знаю, когда я нахожусь в пользовательском интерфейсе управления версиями, я могу выбрать локальные пути, которые позволяют мне перемещаться за пределы рабочей области. Я приложил некоторые усилия, чтобы заставить это работать, но я не уверен, как читать результаты 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);
В некоторых тестах Lite я могу показаться, что вы видите добавленные сегменты, но OriginalStart, похоже, соответствует ModifiedStart, поэтому я просто не хочу этого делать. Если у кого-то есть рекомендации по приличному API Diff, я открыт.
Ответы
Ответ 1
tfs api наиболее определенно позволяет сравнивать два локальных файла. Я не думаю, что вам нужна большая часть DiffOptionFlags, вы можете просто сделать следующее:
DiffSegment segment = Difference.DiffFiles(
file1,
FileType.Detect(file1, null),
file2,
FileType.Detect(file2, null),
new DiffOptions());
Как кратко описывает Мохамед здесь.
Рассел подробно описывает, что делать с DiffSegment здесь.
Например, я сделал следующее
do
{
Console.WriteLine(segment.Type + " " + segment.OriginalStart + " " + Segment.OriginalLength);
} while ((segment = segment.Next) != null);
Надеюсь, это поможет!
Ответ 2
Я думаю, что ответ об использовании TFS API, вероятно, правильный, но я подумал, что я бы также упомянул, что вы можете использовать инструмент, который запускает 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
Итак, если вы вызовете diffmerge.exe без флага /merge, откроется GUI. Я не уверен, что это поведение вы хотите или нет, но просто подумал, что я упоминаю об этом.