2011-11-28 26 views
7

Tôi mới dùng TFS và cần viết một truy vấn TSQL để lấy danh sách tất cả các tệp và số phiên bản được bao gồm trong một số phiên bản thay đổi cụ thể. Trong khi tìm kiếm trực tuyến các bảng để có được thông tin này, tôi đã tìm thấy một số người đề cập đến việc sử dụng cơ sở dữ liệu Tfs_Warehouse và những người khác sử dụng cơ sở dữ liệu Tfs_DefaultCollection. Tôi có các câu hỏi sau:TFS Liệt kê tất cả các tệp và số phiên bản với một thay đổi cụ thể

  • Sự khác nhau giữa hai cơ sở dữ liệu là gì?
  • Tại sao bạn nên sử dụng cái này thay vì cái kia?
  • Bạn sử dụng bảng nào để lấy thông tin về tệp/phiên bản cho một thay đổi cụ thể?
+0

1 cho một câu hỏi cũng bằng văn bản. Tôi cho rằng bạn biết rằng bạn có thể lấy thông tin này từ Visual Studio bằng cách tìm kiếm Lịch sử, và sau đó xem Chi tiết Thay đổi? Nhưng tôi giả định rằng bạn muốn truy xuất chương trình này cho một số mục đích khác. –

+1

Bạn có đang mở một ứng dụng .NET để truy vấn điều này không? Truy vấn trực tiếp cơ sở dữ liệu SQL hoàn toàn không được hỗ trợ. –

+0

Đó là chính xác, tôi cần phải làm điều đó theo chương trình. Nếu phương pháp TSQL không được hỗ trợ, thì có cách nào để làm điều đó bằng cách sử dụng mã VB.Net không? – user1070202

Trả lời

2

Bạn có thể sử dụng VersionControlServer.GetChangeset() method từ Mô hình đối tượng TFS.

Bạn sẽ cần phải thêm tham chiếu đến các hội đồng sau trong GAC:

  • 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 
    

Sau đó, bạn có thể tôi nspect thuộc tính .Changes để xem tất cả các thay đổi được bao gồm trong changeset.

0

tf.exe changeset không cung cấp thông tin bạn muốn không? Nó có nhiều tùy chọn ...

+0

Tôi cần phải làm điều đó theo lập trình, do đó, hoặc thông qua một truy vấn TSQL hoặc từ bên trong VB.Net. – user1070202

+0

Không có gì ngăn bạn gọi 'tf.exe' theo lập trình và phân tích cú pháp đầu ra. Tất nhiên, nếu bạn muốn * để tìm hiểu TFS API thì bằng mọi cách hãy tìm nó ... – AakashM

9

Nếu bạn đang tìm kiếm để có được dữ liệu này từ cơ sở dữ liệu SQL Server, đây là một truy vấn để giúp bạn bắt đầu:

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 

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

+0

Tại sao bạn sẽ truy vấn trực tiếp cơ sở dữ liệu thay vì đi qua mô hình đối tượng? –

+0

Tôi đoán lý do chính của tôi là "bởi vì bạn có thể". Tôi hoàn toàn hiểu rằng các bạn không muốn mọi người mút trong db, và nó chính thức không được hỗ trợ, nhưng thực tế là nó là một lựa chọn. Tôi không khuyên bạn nên chơi xung quanh trong db nếu bạn không thoải mái, nhưng với tôi, đây là cách dễ nhất và tốt nhất để có được kết quả trong trường hợp nhất định. – Matt

+0

Đủ công bằng. Chỉ cần tò mò, thực sự. Nếu tôi là một anh chàng DB thì tôi có thể bị cám dỗ hơn. (Nhưng tôi rất nghèo với SQL.) –

Các vấn đề liên quan