### 添加項目
一旦你的版本庫已經建立并且配置好了,剩下的就是使用了。如果你已經準備好了需要版本控制的數據,那么可以使用客戶端軟件**svn**的`import`子命令來實現你的期望。不過在這樣做之前,你最好對版本庫仔細的作一個長遠的規劃。本節,我們會給你一些好的建議,這些建議可以幫助你設計版本庫的文件布局,以及如何在特定的布局中安排你的數據。
### 選擇一種版本庫布局
在Subversion版本庫中,移動版本化的文件和目錄不會損失任何信息,但是這樣一來那些經常訪問版本庫并且以為文件總是在同一個路徑的用戶可能會受到干擾。為將來著想,最好預先對你的版本庫布局進行規劃。以一種高效的“布局”開始項目,可以減少將來很多不必要的麻煩。
在建立Subversion版本庫之前,有很多事情需要考慮。假如你是一個版本庫管理員,需要向多個項目提供版本控制支持。那么,你首先要決定的是,用一個版本庫支持多個項目,還是為每個項目建立一個版本庫,還是為其中的某些項目提供獨立的版本庫支持,而將另外一些項目分布在幾個版本庫中。
使用一個版本庫支持多個項目有很多好處,最明顯的無過于不需要維護好幾個版本庫。單一版本庫就意味著只有一個鉤子集,只需要備份一個數據庫,當Subversion進行不兼容升級時,只需要一次轉儲和裝載操作,等等。還有,你可以輕易的在項目之間移動數據,還不會損失任何歷史版本信息。
單一版本庫的缺點是,不同的項目通常都有不同的提交郵件列表或者不同的權限認證和權限要求。還有,別忘了Subversion的修訂版本號是針對整個版本庫的。即使最近沒有對某個項目作出修改,版本庫的修訂版本號還是會因為其它項目的修改而不停的提升,許多人并不喜歡這樣的事實。
可以采用折中的辦法。比如,可以把許多項目按照彼此之間的關聯程度劃分為幾個組合,然后為每一個項目組合建立一個版本庫。這樣,在相關項目之間共享數據依舊很簡單,而如果修訂版本號有了變化,至少開發人員知道,改變的東西多少和他們有些關系。
在決定了如何用版本庫組織項目以后,就該決定如何設置版本庫的目錄層次了。由于Subversion按普通的目錄復制方式完成分支和標簽操作(參見[第4章 *分支與合并*]( "第4章分支與合并")),Subversion社區建議為每一個項目建立一個*項目根目錄*―項目的“頂級”目錄―然后在根目錄下建立三個子目錄:`trunk`,保存項目的開發主線;`branches`,保存項目的各種開發分支;`tags`,保存項目的標簽,也就是創建后永遠不會修改的分支(可能會刪除)。
舉個例子,一個版本庫可能會有如下的布局:
~~~
/
calc/
trunk/
tags/
branches/
calendar/
trunk/
tags/
branches/
spreadsheet/
trunk/
tags/
branches/
…
~~~
項目在版本庫中的根目錄地址并不重要。如果每個版本庫中只有一個項目,那么就可以認為項目的根目錄就是版本庫的根目錄。如果版本庫中包含多個項目,那么可以將這些項目劃分成不同的組合(按照項目的目標或者是否需要共享代碼甚至是字母順序)保存在不同子目錄中,下面的例子給出了一個類似的布局:
~~~
/
utils/
calc/
trunk/
tags/
branches/
calendar/
trunk/
tags/
branches/
…
office/
spreadsheet/
trunk/
tags/
branches/
…
~~~
按照你因為合適方式安排版本庫的布局。Subversion自身并不強制或者偏好某一種布局形式,對于Subversion來說,目錄就是目錄。最后,在設計版本庫布局的時候,不要忘了考慮一下項目參與者們的意見。
### 創建布局,導入初始數據
設計好版本庫的布局后,就該在版本庫中實現布局和導入初始數據了。在Subversion中,有很多種方法完成這項工作。可以使用**svn mkdir**命令(參見[第9章 *Subversion完全參考*]( "第9章Subversion完全參考"))在版本庫中逐個創建需要的目錄。更快捷的方法是使用**svn import**命令(參見[“**svn import**”一節]( "svn import"))。首先,在硬盤上創建一個臨時目錄,并按照設計好的布局在其中創建子目錄,然后通過導入命令一次性的提交整個布局到版本庫中:
~~~
$ mkdir tmpdir
$ cd tmpdir
$ mkdir projectA
$ mkdir projectA/trunk
$ mkdir projectA/branches
$ mkdir projectA/tags
$ mkdir projectB
$ mkdir projectB/trunk
$ mkdir projectB/branches
$ mkdir projectB/tags
…
$ svn import . file:///path/to/repos --message 'Initial repository layout'
Adding projectA
Adding projectA/trunk
Adding projectA/branches
Adding projectA/tags
Adding projectB
Adding projectB/trunk
Adding projectB/branches
Adding projectB/tags
…
Committed revision 1.
$ cd ..
$ rm -rf tmpdir
$
~~~
然后可以使用**svn list**命令確認導入的結果是否正確::
~~~
$ svn list --verbose file:///path/to/repos
1 harry May 08 21:48 projectA/
1 harry May 08 21:48 projectB/
…
$
~~~
創建了版本庫布局以后,如果有項目的初始數據,那么可以將這些數據導入到版本庫中。同樣有很多種方法完成這項工作。首先,可以使用**svn import**命令。也可以先從版本庫中取出工作副本,將已有的項目數據復制到工作副本中,再使用**svn add**和**svn commit**命令提交修改。不過這些工作就不屬于版本庫管理方面的內容了。如果對**svn** 客戶端程序還不熟悉,請閱讀[第3章 *指導教程*]( "第3章指導教程")。
- 第1章介紹
- Subversion的歷史
- Subversion的特性
- Subversion的架構
- 安裝Subversion
- Subversion的組件
- 快速入門
- 第2章基本概念
- 版本模型
- Subversion實戰
- 摘要
- 第3章指導教程
- 導入
- 修訂版本: 號碼、關鍵字和日期,噢,我的!
- 初始化的Checkout
- 基本的工作周期
- 檢驗歷史
- 其他有用的命令
- 摘要
- 第4章分支與合并
- 使用分支
- 在分支間拷貝修改
- 常見用例
- 轉換工作拷貝
- 標簽
- 分支維護
- 摘要
- 第5章版本庫管理
- 版本庫的創建和配置
- 版本庫維護
- 添加項目
- 摘要
- 第6章配置服務器
- 網絡模型
- svnserve,一個自定義的服務器
- httpd,Apache的HTTP服務器
- 支持多種版本庫訪問方法
- 第7章高級主題
- 屬性
- Peg和實施修訂版本
- 外部定義
- 賣主分支
- 本地化
- Subversion版本庫URL
- 第8章開發者信息
- 使用API
- 進入工作拷貝的管理區
- WebDAV
- 使用內存池編程
- 為Subversion做貢獻
- 第9章Subversion完全參考
- svn add
- svn blame
- svn cat
- svn checkout
- svn cleanup
- svn commit
- svn copy
- svn delete
- svn diff
- svn export
- svn help
- svn import
- svn info
- svn list
- svn log
- svn merge
- svn mkdir
- svn move
- svn propdel
- svn propedit
- svn propget
- svn proplist
- svn propset
- svn resolved
- svn revert
- svn status
- svn switch
- svn update
- svnadmin
- svnadmin create
- svnadmin deltify
- svnadmin dump
- svnadmin help
- svnadmin hotcopy
- svnadmin list-dblogs
- svnadmin list-unused-dblogs
- svnadmin load
- svnadmin lstxns
- svnadmin recover
- svnadmin rmtxns
- svnadmin setlog
- svnadmin verify
- svnlook
- svnlook author
- svnlook cat
- svnlook changed
- svnlook date
- svnlook diff
- svnlook dirs-changed
- svnlook help
- svnlook history
- svnlook info
- svnlook log
- svnlook propget
- svnlook proplist
- svnlook tree
- svnlook uuid
- svnlook youngest
- svnserve
- svnversion
- mod_dav_svn Configuration Directives
- 附錄A.Subversion對于CVS用戶
- 目錄的版本
- 更多離線操作
- 區分狀態和更新
- 分支和標簽
- 元數據屬性
- 沖突解決
- 二進制文件和轉化
- 版本化的模塊
- 認證
- 轉化CVS版本庫到Subversion
- 附錄C.WebDAV和自動版本化
- 自動版本化交互性
- Subversion和DeltaV
- 術語表