2012-02-27 15 views
12

¿Alguien sabe si es posible utilizar los métodos TFS Difference.DiffFiles() en archivos que no están bajo el control de código fuente? Sé que cuando estoy en la interfaz de usuario de control de origen, puedo seleccionar rutas locales que me permitan moverme fuera del espacio de trabajo. Hice algunos esfuerzos para que esto funcione, pero no estoy seguro de cómo leer los resultados de DiffSegment.Difieren usando la API de TFS

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

En algunas pruebas Lite puedo parecer para ver segmentos que pueden ser añadidos pero el OriginalStart parece coincidir con el ModifiedStart así que simplemente no puede querer hacer esto. Si alguien tiene recomendaciones sobre una API Diff decente, estoy abierto.

Respuesta

9

tfs api definitivamente le permite comparar dos archivos locales. No creo que necesita la mayoría de los DiffOptionFlags, sólo puede hacer lo siguiente:

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

Como Mohamed describe brevemente here.

Russell describe en detalle qué hacer con DiffSegment here.

Por ejemplo hice lo siguiente

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

Espero que esto ayude!

+0

Esto compila, pero no funciona para mí. http://stackoverflow.com/q/16612156/284795 –

1

Creo que la respuesta sobre el uso de la API TFS es probablemente correcta, pero pensé que también mencionaría que puede usar la herramienta que Visual Studio lanza si no quiere meterse con la codificación de algo utilizando la API.

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

En VS2012 y VS2013:

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

Aquí es el uso:

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 

Por lo tanto, si se llama a diffmerge.exe sin los/fusionar bandera, el GUI se abrirá No estoy seguro si ese es el comportamiento que quieres o no, pero pensé que lo mencionaría.

+0

Parece que el ejecutable se renombró a vsDiffMerge.exe en VS2012 y VS2013. – deadlydog

Cuestiones relacionadas