2012-02-27 7 views
12

Czy ktoś wie, czy możliwe jest użycie metod TFS Difference.DiffFiles() na pliki, które nie są pod kontrolą źródła? Wiem, że gdy jestem w interfejsie kontroli kodu źródłowego, mogę wybrać ścieżki lokalne, które pozwalają mi wyjść poza obszar roboczy. Podjąłem pewne starania, aby to zadziałało, ale nie jestem pewien, jak odczytać wyniki DiffSegment.Diff'ing przy użyciu TFS API

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); 

W niektórych lite testowania mogę wydawać się, aby zobaczyć segmenty, które zostaną dodane ale OriginalStart wydaje się pasować do ModifiedStart więc po prostu nie chce tego robić. Jeśli ktoś ma rekomendacje na przyzwoitym API Diff, jestem otwarty.

Odpowiedz

9

Aplikacja tfs api zdecydowanie umożliwia porównanie dwóch plików lokalnych. Nie sądzę, że trzeba większość DiffOptionFlags, wystarczy wykonać następujące czynności:

DiffSegment segment = Difference.DiffFiles(
    file1, 
    FileType.Detect(file1, null), 
    file2, 
    FileType.Detect(file2, null), 
    new DiffOptions()); 

Jak Mohamed krótko opisuje here.

Russell opisuje szczegółowo, co zrobić z DiffSegment here.

Na przykład zrobiłem następujący

do 
{ 
    Console.WriteLine(segment.Type + " " + segment.OriginalStart + " " + Segment.OriginalLength); 
} while ((segment = segment.Next) != null); 

nadzieję, że to pomaga!

+0

To kompiluje, ale to nie działa dla mnie. http://stackoverflow.com/q/16612156/284795 –

1

Myślę, że odpowiedź na temat korzystania z TFS API jest prawdopodobnie poprawna, ale pomyślałem, że wspomnę również, że możesz użyć narzędzia uruchamianego przez Visual Studio, jeśli nie chcesz zadzierać z kodowaniem za pomocą API.

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\diffmerge.exe

W VS2012 i VS2013:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\vsDiffMerge.exe

Oto Wykorzystanie:

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 

Więc jeśli zadzwonisz diffmerge.exe bez/scalić bandery, GUI otworzy się. Nie jestem pewien, czy takie zachowanie chcesz, czy nie, ale pomyślałem, że o tym wspomnę.

+0

Wygląda na to, że plik wykonywalny został zmieniony na vsDiffMerge.exe w VS2012 i VS2013. – deadlydog