### 標簽
另一個常見的版本控制系統概念是標簽(*tag*),一個標簽只是一個項目某一時間的“快照”,在Subversion里這個概念無處不在―每一次提交的修訂版本都是一個精確的快照。
然而人們希望更人性化的標簽名稱,像`release-1.0`。他們也希望可以對一個子目錄快照,畢竟,記住release-1.0是修訂版本4822的某一小部分不是件很容易的事。
### 建立最簡單的標簽
**svn copy**再次登場,你希望建立一個`/calc/trunk`的一個快照,就像`HEAD`修訂版本,建立這樣一個拷貝:
~~~
$ svn copy http://svn.example.com/repos/calc/trunk \
http://svn.example.com/repos/calc/tags/release-1.0 \
-m "Tagging the 1.0 release of the 'calc' project."
Committed revision 351.
~~~
這個例子假定`/calc/tags`目錄已經存在(如果不是,見[svn mkdir]( "svn mkdir")),拷貝完成之后,一個表示當時`HEAD`版本的/calc/trunk目錄的鏡像已經永久的拷貝到`release-1.0`目錄。當然,你會希望更精確一點,以防其他人在你不注意的時候提交修改,所以,如果你知道`/calc/trunk`的版本350是你想要的快照,你可以使用**svn copy**加參數 `-r 350`。
但是等一下:標簽的產生過程與建立分支是一樣的?是的,實際上在Subversion中標簽與分支沒有區別,都是普通的目錄,通過copy命令得到,與分支一樣,一個目錄之所以是標簽只是*人們*決定這樣使用它,只要沒有人提交這個目錄,它永遠是一個快照,但如果人們開始提交,它就變成了分支。
如果你管理一個版本庫,你有兩種方式管理標簽,第一種方法是禁止命令:作為項目的政策,我們要決定標簽所在的位置,確定所有用戶知道如何處理拷貝的目錄(也就是確保他們不會提交他們),第二種方法看來很過分:使用訪問控制腳本來阻止任何想對標簽目錄做的非拷貝的操作(見[第6章 *配置服務器*]( "第6章配置服務器"))這種方法通常是不必要的,如果一個人不小心提交了到標簽目錄一個修改,你可以簡單的取消,畢竟這是版本控制啊。
### 建立復雜的標簽
有時候你希望你的“快照”能夠很復雜,而不只是一個單獨修訂版本的一個單獨目錄。
舉個例子,假定你的項目比我們的的例子`calc`大的多:假設它保存了一組子目錄和許多文件,在你工作時,你或許決定創建一個包括特定特性和Bug修正的工作拷貝,你可以通過選擇性的回溯文件和目錄到特定修訂版本(使用**svn update -r**)來實現,或者轉換文件和目錄到特定分支(使用**svn switch**),這樣做之后,你的工作拷貝成為版本庫不同版本和分支的司令部,但是經過測試,你會知道這是你需要的一種精確數據組合。
是時候進行快照了,拷貝URL在這里不能工作,在這個例子里,你希望把本地拷貝的布局做鏡像并且保存到版本庫中,幸運的是,**svn copy**包括四種不同的使用方式(在第9章可以詳細閱讀),包括拷貝工作拷貝到版本庫:
~~~
$ ls
my-working-copy/
$ svn copy my-working-copy http://svn.example.com/repos/calc/tags/mytag
Committed revision 352.
~~~
現在在版本庫有一個新的目錄`/calc/tags/mytag`,這是你的本地拷貝的一個快照―混合了修訂版本,URL等等。
一些人也發現這一特性一些有趣的使用方式,有些時候本地拷貝有一組本地修改,你希望你的協作者看到這些,不使用**svn diff**并發送一個不定文件(不會捕捉到目錄修改),而是使用**svn copy**來“上傳”你的工作拷貝到一個版本庫的私有區域,你的協作者可以選擇完整的取出你的工作拷貝,或使用**svn merge**來接受你的精確修改。
- 第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
- 術語表