Различаются с использованием TFS API - PullRequest
12 голосов
/ 28 февраля 2012

Кто-нибудь знает, возможно ли использовать методы 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);

В некотором облегченном тестировании я могу видеть сегменты, которые добавляются, но OriginalStart, кажется, соответствует ModifiedStart, поэтому я просто не хочу этого делать. Если у кого-то есть рекомендации по приличному Diff API, я открыт.

Ответы [ 2 ]

9 голосов
/ 29 февраля 2012

API TFS, безусловно, позволяет сравнивать два локальных файла.Я не думаю, что вам нужно большинство 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);

Надеюсь, это поможет!

1 голос
/ 29 февраля 2012

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

...