該文是svn源代碼分析系列文章服務端架構中的一篇,主要描述svn服務端版本庫數據存儲目錄結構,而且對這些文件以及目錄的做用進行簡單分析。使用「svnmadin create」命令建立初始化版本庫後,使用「tree」命令打印出沒有通過任何修改的原始版本庫目錄。
$ svnadmin /svnrepos/morepos
$ tree /svnrepos/morepos -p
morepos
|-- [-rw-r--r--] README.txt
|-- [drwxr-xr-x] conf
| |-- [-rw-r--r--] authz
| |-- [-rw-r--r--] passwd
| `-- [-rw-r--r--] svnserve.conf
|-- [drwxr-sr-x] db
| |-- [-rw-r--r--] current
| |-- [-r--r--r--] format
| |-- [-rw-r--r--] fs-type
| |-- [-rw-r--r--] fsfs.conf
| |-- [-rw-r--r--] min-unpacked-rev
| |-- [drwxr-sr-x] revprops
| | `-- [drwxr-sr-x] 0
| | `-- [-r--r--r--] 0
| |-- [drwxr-sr-x] revs
| | `-- [drwxr-sr-x] 0
| | `-- [-r--r--r--] 0
| |-- [drwxr-sr-x] transactions
| |-- [-rw-r--r--] txn-current
| |-- [-rw-r--r--] txn-current-lock
| |-- [drwxr-sr-x] txn-protorevs
| |-- [-rw-r--r--] uuid
| `-- [-rw-r--r--] write-lock
|-- [-r--r--r--] format
|-- [drwxr-xr-x] hooks
| |-- [-rw-r--r--] post-commit.tmpl
| |-- [-rw-r--r--] post-lock.tmpl
| |-- [-rw-r--r--] post-revprop-change.tmpl
| |-- [-rw-r--r--] post-unlock.tmpl
| |-- [-rw-r--r--] pre-commit.tmpl
| |-- [-rw-r--r--] pre-lock.tmpl
| |-- [-rw-r--r--] pre-revprop-change.tmpl
| |-- [-rw-r--r--] pre-unlock.tmpl
| `-- [-rw-r--r--] start-commit.tmpl
`-- [drwxr-xr-x] locks
|-- [-rw-r--r--] db-logs.lock
`-- [-rw-r--r--] db.lock
10 directories, 27 files
路徑 |
類型 |
做用 |
conf |
目錄 |
存放版本庫所用配置文件的目錄 |
dav |
目錄 |
供mod_dav_svn使用 |
db |
目錄 |
版本數據存儲目錄 |
db/fs-type |
文件 |
版本庫數據真實存儲格式,SVN有fsfs和bdb兩種存儲格式 |
db/revprops |
目錄 |
記錄版本屬性 |
db/revs |
目錄 |
版本庫數據存儲真實目錄 |
db/uuid |
文件 |
存儲版本庫惟一標識號,參考《svn版本庫標識uuid簡述》 |
db/txn-current |
文件 |
記錄當前事務 |
format |
文件 |
存儲一個整數的文件,此整數表明庫層次結構版本 |
hooks |
目錄 |
存放版本庫勾子目錄 |
locks |
目錄 |
存儲庫鎖目錄,用來跟蹤庫的訪問者 |
其中revs下面是以目錄組織的版本結構,每1000個版本組成一個目錄,每一個版本自成一個文件,文件名即爲commit後生成的版本號;即便刪除掉部分版本也不會影響版本庫的讀取和顯示;可是基礎版本丟失會使版本庫沒法訪問;