2010-01-28 9 views
7

utilizzando Visual Studio 2008 strumenti,Spiegando tf diff

io sto cercando di ottenere un diff ASCII di cambiamento imposta 14318 e 14317.

posso farlo utilizzando GUI:

tf changeset 14318 

e quindi selezionare un file e fare clic con il tasto destro del mouse e selezionare Confronta con la versione precedente. Tuttavia, questo è un po 'noioso ed è basato sulla GUI. Il mio compito è quello di eseguire il back-port di molte modifiche in un ramo diverso. Mi piacerebbe automatizzare il test (diciamo usando Python), assicurandomi che l'ho fatto correttamente. Bene, per scopi educativi farò tutte le modifiche a mano senza guardare la soluzione, e poi confronterò le due modifiche e cercherò di cercare eventuali differenze. Ecco cosa mi piace di tf - Posso digitare:

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

per visualizzare i dettagli di quali file sono stati interessati.

Analogamente, desidero ottenere un out.txt con tutte le differenze salvate. Sono abbastanza sicuro di poter gestire la parte di Python. Voglio assolutamente sapere come farlo usando lo strumento tf.exe, ma se ti capita anche di conoscere altri trucchi per realizzare questo (qualche simpatico strumento di terze parti, o script PowerShell, allora fammi sapere pure).

Grazie!

Oh, a proposito, ho controllato questo: http://msdn.microsoft.com/en-us/library/6fd7dc73(VS.80).aspx

E ho provato questo:

tf diff 14318 14317 

E ho ottenuto questo errore: file (o cartella) c: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ 14318 non esiste.

Ora grazie.

EDIT: Ci sono dei strumenti a tutto ciò che può fare questo?

+0

Perché voi dì "Posso farlo usando la GUI: tf changeset 14318" ?? tf.exe è commandline, non GUI. – pabrams

risposta

17

Non stai usando la sintassi corretta quando lo chiami. In questo caso, ha provato a fare una differenza tra la tua copia di lavoro e la versione del repository di base dei file (non esistenti) 14318 e .

Quello che dovete fare, invece è quello di utilizzare una serie di modifiche in /version, in questo modo:

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

noti che è possibile utilizzare ~ con tutte le altre specifiche di versione - etichette, date, ecc Vedere here per i dettagli .

+0

Grazie! E come dovrei fare un diff sulla versione attuale (locale) e l'ultima o non modificata? Grazie molto! –

+0

Se non si specifica l'intervallo, ma solo una singola versione, la versione locale verrà confrontata con quella specificata, ad es.'/ version: C1000' confronta la versione locale con quella successiva al changeset 1000. La versione più recente può essere specificata da'/version: T'. La versione base per quella locale è '/ version: W' (si noti che tutti questi sono anche utilizzabili in intervalli, quindi'/version: C1000 ~ T' è perfettamente valido). Inoltre, è possibile utilizzare percorsi file locali anziché percorsi server TFS. –

+0

Penso che questo faccia esattamente quello che voglio! Perché la gente non vota la tua risposta dannatamente? –

1

Ecco una (V2) di script PowerShell, che si estende dalla risposta di Pavel, questo sarà più performante, perché troviamo i file che sono cambiati, quindi ottenere tf diff individualmente:

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

Grazie, quali sono i prerequisiti per la gestione di questo? –

+0

È necessario disporre di strumenti di alimentazione TFS installati per utilizzare TF.exe e avere installato PowerShell versione 2.0. Gli strumenti Power includeranno uno snapshot di PowerShell, che viene utilizzato all'inizio dello script. – Russell

+0

Un buon punto di partenza, anche se qualcuno cerca di riprodurlo su una macchina x64, assicurati di cambiare "C: \ Programmi \" in "C: \ Programmi (x86) \". Inoltre, questo deve essere eseguito in una directory mappata in modo che Get-TfsChangeset possa trovare il server ($ tfs_server non è mai usato). Infine, se vuoi conoscere la differenza tra due versioni, non è sufficiente diffare tutti i file contenuti nel primo changeset. Le modifiche al di fuori di questi file potrebbero influire su di essi. Dovrai includere tutti i file che sono cambiati tra la prima e la seconda versione, forse limitati a una particolare cartella. – SvenS