c: \ temp> tf dossierdiff /?
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
===========================================================================
Edit: si ce n'était pas évident, la vue par défaut est sourceOnly + targetOnly + différent. J'ai eu un fichier nommé "foo" avec le même contenu dans les deux dossiers.
Je réalise qu'un outil de ligne de commande n'est pas une API en soi, mais malheureusement c'est la meilleure option ici. Sinon, vous devez explorer l'arborescence vous-même: il n'y a pas de diff dans l'API de contrôle de version. Tout ce que vous obtenez est un plus de 15 méthodes déroutantes qui fonctionnent sur des éléments individuels. Du côté positif, si tous les fichiers que vous voulez comparer vont être archivés, cela signifie que vous pouvez faire le calcul sans aucune E/S disque coûteuse. (TFS stocke un hachage du contenu de chaque fichier). Exemple rapide 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
}
Malheureusement, faire quelque chose comme cela prendrait 5X autant de lignes de code si vous avez besoin pour soutenir diffs locale vs serveur.
Votre code ne fonctionne pas. Par exemple: linq-ToSet n'est pas une cmdlet. – pabrams