2010-01-28 8 views
7

Visual Studio 2008-Tools,Erklären tf diff

Ich versuche, eine ASCII diff Änderungs 14318 und 14317. setzt

ich so GUI tun zu bekommen:

tf changeset 14318 

und Wählen Sie dann eine Datei und klicken Sie mit der rechten Maustaste und wählen Sie Vergleich mit der vorherigen Version. Dies ist jedoch ein wenig mühsam und es ist GUI-basiert. Meine Aufgabe besteht darin, viele Änderungen in einen anderen Zweig zurück zu portieren. Ich möchte das Testen automatisieren (sagen wir Python) und sicherstellen, dass ich es richtig gemacht habe. Nun, für Bildungszwecke werde ich alle Änderungen von Hand vornehmen, ohne die Lösung zu betrachten, und dann werde ich die beiden Änderungen vergleichen und versuchen, nach Unterschieden zu suchen. Hier ist, was ich an TF liebe - Ich kann schreiben:

tf changeset 14318 > out.txt&&notepad out.txt 

, um die Details der betroffenen Dateien anzuzeigen.

In ähnlicher Weise möchte ich eine out.txt mit allen gespeicherten Unterschiede erhalten. Ich bin mir ziemlich sicher, dass ich mit dem Python-Teil umgehen kann. Ich möchte definitiv wissen, wie man es mit dem tf.exe-Tool macht, aber wenn Sie zufällig auch andere Tricks kennen, um das zu erreichen (ein cooles 3rd-Party-Tool oder ein PowerShell-Skript, dann lassen Sie es mich auch wissen).

Vielen Dank!

Oh, übrigens, ich dies überprüft: http://msdn.microsoft.com/en-us/library/6fd7dc73(VS.80).aspx

Und ich versuchte dies:

tf diff 14318 14317 

Und ich habe diesen Fehler bekommen: Die Datei (oder Ordner) c: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ 14318 existiert nicht.

Jetzt danke.

EDIT: Gibt es irgendwelche Werkzeuge überhaupt, die das tun können?

+0

Warum Sie tun Sagen Sie "Ich kann das mit GUI tun: tf changeset 14318" ?? tf.exe ist eine Befehlszeile, keine GUI. – pabrams

Antwort

17

Sie verwenden gerade nicht die korrekte Syntax, wenn Sie sie aufrufen. In diesem Fall wurde versucht, einen Unterschied zwischen Ihrer Arbeitskopie und der Basis-Repository-Version der (nicht vorhandenen) Dateien 14318 und zu erstellen.

Was Sie stattdessen tun müssen, ist eine changeset Bereich in /version, wie diese zu verwenden:

tf diff $/Foo /version:C14317~C14318 /recursive /format:unified > foo.diff 

Beachten Sie, dass ~ mit anderen Version Spezifikationen verwenden können - Etiketten usw. Daten here für Details .

+0

Danke! Und wie würde ich einen Unterschied in der aktuellen Version (lokal) und der neuesten oder unmodifiziert machen? Danke vielmals! –

+0

Wenn Sie nicht den Bereich, sondern nur eine einzelne Version angeben, wird Ihre lokale Version mit der von Ihnen angegebenen verglichen - d. H.'/ version: C1000' vergleicht die lokale Version mit der nach dem Änderungssatz 1000. Die letzte Version kann mit'/version: T' angegeben werden. Die Basisversion für Ihre lokale Version ist '/ version: W' (beachten Sie, dass all diese auch in Bereichen verwendbar sind, so dass'/version: C1000 ~ T' vollkommen gültig ist). Sie können auch lokale Dateipfade anstelle von TFS-Serverpfaden verwenden. –

+0

Ich denke, das macht genau das, was ich will! Warum wählen die Leute nicht deine Antwort, verdammt noch mal? –

1

Hier ist ein Powershell (V2) Skript, von Pavel Antwort erstreckt, diese performanter sein wird, weil wir die Dateien, die sich geändert haben, dann tf erhalten sie individuell diff:

Write-Host "Checking if TFS snap-in has been added..." -ForegroundColor green 

# Find all TFS snapins. 
$snapins = Get-PSSnapin -Registered | Where-Object { $_.Name -like "*TeamFoundation*" } 

foreach($snapin in $snapins) 
{ 
    # Add snapin if not already added. 
    $exists = Get-PSSnapin | Where-Object { $_.Name -eq $snapin.Name } 
    if (!$exists) 
    { 
     Write-Host "Adding Snapin " $snapin.Name -ForegroundColor green 
     Add-PSSnapin $snapin.Name 
    } 
    else 
    { 
     Write-Host "Snapin already added." -ForegroundColor green 
    } 
} 



# Get TFS Server object reference. 
$tfs_server = Get-TfsServer -Name $/<serverName>/<RepoDir> 

# Get list of changed files 
$changes_from_changeset = Get-TfsChangeset -ChangesetNumber 829 | Select -Expand Changes | % { $_.Item.ServerItem } 
#$changes_from_changeset 

foreach($change in $changes_from_changeset) 
{ 
    &"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe" diff $change /version:829~T /format:unified 
} 
+0

Danke, was sind die Voraussetzungen dafür, wenn das funktioniert? –

+0

Sie müssen TFS Power-Tools installiert haben, um TF.exe zu verwenden und PowerShell Version 2.0 installiert zu haben. Die Power-Tools enthalten ein PowerShell-Snapin, das am Anfang des Skripts verwendet wird. – Russell

+0

Netter Ausgangspunkt, wenn jemand versucht, dies auf einem x64-Computer zu reproduzieren, stellen Sie sicher, "C: \ Programme \" in "C: \ Programme (x86)" zu ändern. Dies muss auch in einem gemappten Verzeichnis ausgeführt werden, damit Get-TfsChangeset den Server finden kann ($ tfs_server wird nie benutzt). Schließlich, wenn Sie den Unterschied zwischen zwei Versionen wissen wollen, ist es nicht genug, alle Dateien zu differieren, die im ersten Änderungssatz enthalten sind. Änderungen außerhalb dieser Dateien können sich auf sie auswirken. Sie möchten alle Dateien einschließen, die zwischen der ersten und der zweiten Version geändert wurden, möglicherweise auf einen bestimmten Ordner beschränkt. – SvenS