这里来说下关于TFS 2008中源码管理器所对应的数据库表。在个别情况下,或许会对某个历史文件做修改(当然,除非非常情况,理论上是不允许这样做的,这里也是为了了解其结构来写的)。
在TFS的源码管理中,每一个文件,无论是*.docx还是*.cs这类的文件,都以二进制形式被存放在TFS的数据库中,每一个文件(这里的文件包括这个文件的历史记录)被称为一个"版本"。实际上在数据库中,每一个"版本"都会有一个ChangeSetID以其对应。记录他的迁入时间、签入人、注释等信息。另外会有一个表,专门以二进制的方式将这个文件存入表中。这就是为什么TFS中的任何一个文件都能将其历史记录恢复,因为他们并没有被覆盖或删除,而历史文件被作为另一个版本被存放在数据库中。
下面介绍下关于源码管理表的
tbl_Annotation 注释
tbl_ChangeSet 修改记录表。这个表记录版本修改的记录。
[ChangeSetId]版本的ID。他在[tbl_Version]表中与[tbl_Content]表中的ID对应。
,[OwnerId]版本操作人的ID。这里是历史记录里的操作人!关于操作人可以从[tbl_Identity]表中找到操作人的ID对应。
,[CreationDate]修改建立时间,理论上应该与[tbl_Content]表中的[CreationDate]时间相同。
,[Comment]签入注释
,[CheckInNoteId]未知
,[CommitterId] 提交者ID。这里暂未知道在哪里显示,在对比后发现应该和[OwnerId]相同。
tbl_Conflict 冲突表
tbl_Content 数据内容表。这个表通过二进制,记录着每个版本的数据内容,其中
[CreationDate]数据建立时间。
,[Content]数据内容(这里为二进制),同过流方式以image的类型存入。
,[FileId]此文件的FileID,他在[tbl_Version]表中与[tbl_ChangeSet]表中的ID对应。
,[OffsetFrom]
,[OffsetTo]文件的起止大小,一般From为0,To为文件的大小。
tbl_Counter
tbl_Extension
tbl_Version 版本表,里面有ChangeSet和Content的ID对应
[VersionFrom]这个就是[tbl_ChangeSet]表中的[ChangeSetId]
,[VersionTo]这个是被修改的版本,被修改了的文件,他的From和To是相同的,如果是最新文件,那么会是一个为"2147483647" 的值。
,[ItemId]这个文件的ID,无论他被修改了多少次(多出了多少个版本),这个文件仍是一个文件,用此ID标识。
,[Command]未知
,[ParentPath]父路径
,[ChildItem]子项目
,[Encoding]编码
,[DeletionId]未知
,[FileId] 这个就是[tbl_ Content]表中的[FileId]。
,[FullPath]文件完全路径。
通过版本来列出这个文件的二进制表
select * from [TfsVersionControl].[dbo].[tbl_Content]
where [TfsVersionControl].[dbo].[tbl_Content].[FileId]=
(select [TfsVersionControl].[dbo].[tbl_Version].[FileID] from [TfsVersionControl].[dbo].[tbl_Version]
where [TfsVersionControl].[dbo].[tbl_Version].[VersionFrom]='文件版本')