Подтвердить что ты не робот

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, я открыт.

4b9b3361

Ответ 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. Я не уверен, что это поведение вы хотите или нет, но просто подумал, что я упоминаю об этом.