2011-11-28 14 views
7

Sono nuovo di TFS e ho bisogno di scrivere una query TSQL per ottenere un elenco di tutti i file e numeri di versione inclusi in un particolare numero di versione del changeset. Durante la ricerca in linea per le tabelle per ottenere queste informazioni, ho trovato alcune persone che citano di utilizzare il database Tfs_Warehouse e altre che hanno utilizzato il database Tfs_DefaultCollection. Ho le seguenti domande:TFS Elenco di tutti i file e numeri di versione con un changeset particolare

  • Qual è la differenza tra i due database?
  • Perché dovresti usare uno invece dell'altro?
  • Quali tabelle si utilizzano per ottenere le informazioni sul file/versione per un changeset particolare?
+0

+1 per una domanda ben scritto. Suppongo che tu sappia che puoi ottenere queste informazioni da Visual Studio ricercando la cronologia e quindi visualizzando i dettagli del changeset? Ma suppongo che tu voglia recuperarlo a livello di programmazione per qualche altro scopo. –

+1

Sei aperto alla scrittura di un'applicazione .NET per richiedere questo? La query sul database SQL direttamente non è supportata. –

+0

Questo è corretto, ho bisogno di farlo a livello di programmazione. Se il metodo TSQL non è supportato, esiste un modo per farlo usando il codice VB.Net? – user1070202

risposta

2

È possibile utilizzare VersionControlServer.GetChangeset() method dal modello a oggetti TFS.

Sarà necessario aggiungere i riferimenti ai seguenti assembly nella Global Assembly Cache:

  • Microsoft.TeamFoundation.Common
  • Microsoft.TeamFoundation.Client
  • Microsoft.TeamFoundation.VersionControl.Client

    Private Shared Sub Main(ByVal args As String()) 
        Dim tfs As TfsTeamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(New Uri("http://tfsserver:8080/tfs/CollectionName"), New UICredentialsProvider) 
        tfs.Connect(ConnectOptions.None) 
        Dim vcs As VersionControlServer = tfs.GetService(Of VersionControlServer) 
        Dim changeset As Changeset = vcs.GetChangeset(changeset ID, True, False) 
    End Sub 
    

Quindi è possibile nspetti la proprietà .Changes per vedere tutte le modifiche incluse nel changeset.

0

Il tf.exe changeset non fornisce le informazioni desiderate? Ha molte opzioni ...

+0

Ho bisogno di farlo a livello di programmazione, quindi tramite una query TSQL o all'interno di VB.Net. – user1070202

+0

Non c'è niente che si ferma chiamando 'tf.exe' a livello di codice e analizzando l'output. Ovviamente, se si * desidera * imparare l'API TFS, allora è assolutamente necessario ... – AakashM

9

Se stai cercando di ottenere questi dati dal database di SQL Server, qui è una query per iniziare:

SELECT 
    chg_set.CreationDate, 
    chg_set.ChangeSetId, 
    v.FullPath 
FROM dbo.tbl_ChangeSet (nolock)AS chg_set 
    INNER JOIN dbo.tbl_Version (nolock)AS v ON chg_set.ChangeSetId = v.VersionFrom 
    LEFT OUTER JOIN dbo.tbl_File (nolock) AS f ON v.FileId = f.FileId 
WHERE (chg_set.ChangeSetId = [Your changeset ID]) 
ORDER BY chg_set.CreationDate, v.FullPath 

Fonte: http://www.isosoft.org/taoffi/post/2012/05/22/TFS-database-pause-Change-set-quantitative-statistics-sample.aspx

+0

Perché dovresti interrogare il database direttamente invece di passare attraverso il modello a oggetti? –

+0

Immagino che il motivo principale sia "perché puoi". Capisco perfettamente che voi ragazzi non volete che la gente mastichi nel db, ed è ufficialmente non supportato, ma la realtà è che è un'opzione. Non consiglio di giocare nel db se non ti senti a mio agio, ma per me questo è il modo più semplice e migliore per ottenere risultati in certi casi. – Matt

+0

Abbastanza giusto. Solo curioso, davvero. Se fossi un ragazzo di DB, potrei essere più tentato. (Ma sono tristemente povero con l'SQL.) –

Problemi correlati