Cómo comparar el código fuente en proyectos TFS

Tenemos una serie de proyectos henetworkingados que se agregaron recientemente al control de versiones de TFS. Ahora el problema que tenemos es que cada uno de nuestros proyectos contiene copys de código común que se ha modificado y mantenido separadamente el uno del otro.

¿Hay alguna forma de comparar el origen de una solución en TFS para el origen en otra solución en el mismo server TFS? – Puedo especificar qué carpetas y files comparar.

La reestructuración del repository o la realización de una refactorización importante de la solución no es una opción en este momento debido al tamaño y la naturaleza de las soluciones.

También estoy interesado en cualquier API que exista para automatizar potencialmente este process.

¡Gracias!

c: \ temp> tf folderdiff /?

TF - Team Foundation Version Control Tool Copyright (c) Microsoft Corporation. All rights reserved. Displays a visual representation of the differences between files in two server folders, in a server folder and a local folder, or in two local folders. tf folderdiff [sourcePath] targetPath [/recursive] [/noprompt] [/server:serverName:port] [/filter:filter] [/filterLocalPathsOnly] [/view:same,different,sourceOnly,targetOnly] 

C: \ temp> tf folderdiff 1 2 / noprompt

 =========================================================================== Items That Exist Only in C:\temp\1 =========================================================================== C:\temp\1\baz =========================================================================== Items That Exist Only in C:\temp\2 =========================================================================== C:\temp\2\bar =========================================================================== Show Items That Have Different Contents =========================================================================== C:\temp\1\quux - C:\temp\2\quux =========================================================================== Summary: 1 folders, 4 files, 1 source, 1 target, 1 different, 0 with errors =========================================================================== 

Editar: si no fue obvio, la vista pnetworkingeterminada es sourceOnly + targetOnly + different. Tenía un file llamado "foo" con los mismos contenidos en ambas carpetas.

Me doy count de que una herramienta de command-line no es una API per se, pero desafortunadamente es la mejor opción aquí. De lo contrario, debe rastrear el tree usted mismo: no hay diferencias de carpeta en la API de control de versiones. Todo lo que obtienes es un 15 o más methods confusos que operan en artículos individuales.

En el lado positivo, si se van a registrar todos los files que desea comparar, eso significa que puede hacer el cálculo sin costosas E / S de disco. (TFS almacena un hash del contenido de cada file). Ejemplo de Quick Powershell:

 function Compare-TfsDir([string] $dir1, [string] $dir2, [switch] $includeEqual) { $dir1 = $dir1.ToLower() $dir2 = $dir2.ToLower() filter Decorate($dir) { $_ | add-member noteproperty RelativePath $_.ServerItem.ToLower().Replace($dir, "") -passthru | add-member noteproperty HashString ($_.HashValue | %{ "{0:X2}" -f $_ } | join-string) -passthru } $items1 = $tfs.vcs.GetItems($dir1, $tfs.VCS_RecursionType::Full).Items | Decorate $dir1 $items2 = $tfs.vcs.GetItems($dir2, $tfs.VCS_RecursionType::Full).Items | Decorate $dir2 $dirComp = compare -IncludeEqual -Property RelativePath $items1 $items2 "---Tree Comparison---" $dirComp | ? { $_.SideIndicator -ne "==" } | ft -auto RelativePath, SideIndicator $both = $dirComp | ? { $_.SideIndicator -eq "==" } | % { $_.RelativePath } | Linq-ToSet filter InBoth { if ($both.Contains($_.RelativePath)) {$_} } $contentComp = compare -inc:$includeEqual -Property HashString, RelativePath ` ($items1 | InBoth) ($items2 | InBoth) "---Content Comparison---" $contentComp | ? { $_.SideIndicator -ne "<=" } | ft -auto RelativePath, SideIndicator } 

Desafortunadamente, hacer algo como esto tomaría 5 veces más líneas de código si necesita soportar diffs locales vs serveres.