Rất nhiều các truy vấn này không còn phù hợp với trường hợp mới của TFS. Một trong những lý do chính là danh tính người dùng (tbl_Identity) đã được di chuyển. Tfs_DefaultCollection là DB lưu trữ tất cả thông tin liên quan đến một Bộ sưu tập nhất định, nhưng TFS có thể lưu trữ nhiều Bộ sưu tập AND một Quản trị viên có thể thay đổi tên của Bộ sưu tập mặc định khi thiết lập TFS.
Như vậy, tất cả các nhận dạng người dùng đã được chuyển đến cơ sở dữ liệu Tfs_Configuration;
select * from [tfs_Configuration].dbo.tbl_Identity
Đạt Truy cập vào phần mô tả của tên tài khoản (AccountName hoặc DisplayName) từ một Bộ sưu tập DB được thực hiện bằng Tham gia từ [tfs_DefaultCollection] .dbo.tbl_IdentityMap
select *
from [tfs_Configuration].dbo.tbl_Identity I
JOIN [tfs_DefaultCollection].dbo.tbl_IdentityMap IM
ON I.Id = IM.MasterID
Với thông tin này trong tay , bây giờ chúng ta có thể tạo ra truy vấn sau đây để hiển thị 100 ChangeSets cuối cùng đã cam kết với TFS cũng như tên của người commit.
select top 100 *
from tbl_changeset as c
JOIN tbl_IdentityMap IM
ON C.OwnerID = IM.localId
JOIN tfs_configuration.dbo.tbl_Identity u
ON IM.MasterID = u.Id
Order by C.ChangeSetID DESC
Nhìn vào dữ liệu này, chúng ta có thể nhìn thấy rất nhiều ID, SIDS, tra cứu vv Những gì chúng ta sẽ không thấy trong dữ liệu này là bất kỳ thông tin về các tập tin đã được cam kết hoặc thông tin về chi nhánh Commit đã được thực hiện. Thông tin này đến từ bảng tbl_Version.
select top 100 *
from [tfs_DefaultCollection].dbo.tbl_changeset as c
JOIN [tfs_DefaultCollection].dbo.tbl_IdentityMap IM
ON C.OwnerID = IM.localId
JOIN [tfs_configuration].dbo.tbl_Identity u
ON IM.MasterID = u.Id
JOIN [tfs_DefaultCollection].dbo.tbl_Version as v
ON v.Versionfrom = c.ChangeSetId
Order by C.ChangeSetID DESC
[tfs_DefaultCollection] .dbo.tbl_Version có một vài cột quan tâm, cụ thể là; ParentPath, ChildItem & FullPath.Điều còn thiếu ở đây là bất kỳ thông tin hữu ích nào liên quan đến Chi nhánh mà cam kết đã được đưa ra. Thông tin chi nhánh được nhúng vào một trong hai trường Đường dẫn có sẵn;
$\da3da7cf"80b5"4385"b3dc"ebb3088f3c01\Features\Inpatient\Source\Yadda\Yadda\Yadda\
Điều này đặt ra câu hỏi tiếp theo, thông tin chi tiết được lưu trữ trong TFS ở đâu? Nhờ câu trả lời StackOverflowUsers ở trên, thông tin này được tìm thấy trong bảng [tfs_DefaultCollection] .dbo.TreeNodes;
select * from [tfs_DefaultCollection].dbo.[TreeNodes] where parentID=0 and fDeleted=0
Các CssNodeID Cột là ID chúng tôi đang tìm kiếm để làm cho tinh thần ra khỏi fullpath
CoolBranchName da3da7cf-80b5-4385-b3dc-ebb3088f3c01
Tuy nhiên, điều này cho chúng ta với thử thách tiếp theo của chúng tôi liên quan đến việc cơ sở dữ liệu TFS. Rất nhiều thông tin được mã hóa và \ hoặc được nhúng nên chúng ta cần thao tác một vài thứ để có được những gì chúng ta đang có.
Trong trường hợp này, một phần của giá trị [tfs_DefaultCollection] .dbo.tbl_Version.ParentPath hoặc [tfs_DefaultCollection] .dbo.tbl_Version.FullPath chứa thông tin Chi nhánh.
này ít Diddy xấu xí ngay tại đây trích xuất phần ID của giá trị trường ParentPath và thay thế tất cả các dấu nháy kép với dấu gạch ngang đó cho chúng ta một giá trị Id chúng ta có thể sử dụng để truy vấn [Tfs_DefaultCollection] .dbo.TreeNodes
SUBSTRING(
REPLACE(v.ParentPath, '$\', ''),
CHARINDEX('\', REPLACE(v.ParentPath, '$\', '')),
(LEN(v.ParentPath) - CHARINDEX('\', REPLACE(v.ParentPath, '$\', '')))
)
Đưa tất cả điều này lại với nhau để theo đuổi truy vấn tìm nạp chi tiết đăng ký cuối cùng [X] kết quả như sau;
select top 10
c.CreationDate,
c.Comment,
u.DisplayName as CommittingUser,
TN.Name as BranchName,
SUBSTRING(
REPLACE(v.ParentPath, '$\', ''),
CHARINDEX('\', REPLACE(v.ParentPath, '$\', '')),
(LEN(v.ParentPath) - CHARINDEX('\', REPLACE(v.ParentPath, '$\', '')))
) as ChangedFile
from tbl_changeset as c
JOIN tbl_IdentityMap IM
ON C.OwnerID = IM.localId
JOIN [Tfs_Configuration].dbo.tbl_Identity u
ON IM.MasterID = u.Id
JOIN dbo.tbl_Version as v
ON v.Versionfrom = c.ChangeSetId
LEFT JOIN dbo.TreeNodes TN with(nolock)
ON TN.CssNodeId = REPLACE(
SUBSTRING(
REPLACE(v.ParentPath, '$\', ''),
0,
CHARINDEX('\', REPLACE(v.ParentPath, '$\', ''))
),
'"', '-'
)
AND parentID=0
AND fDeleted=0
Order by c.CreationDate desc
Lưu ý rằng tôi đã bao gồm các vòng loại DB cho tất cả các truy vấn dẫn đến truy vấn cuối cùng để cung cấp ngữ cảnh nơi đặt bảng quan tâm.
Làm thế nào về điều này. Lấy bộ kết quả thông qua TFS SDK trong khi bạn có Profiler chạy trên máy chủ TFS. Xem những câu lệnh SQL được tạo ra. –