轉自:http://blog.csdn.net/cb_121/archive/2008/10/28/3167901.aspx
基本使用
SVN是CVS的下一個版本,主要用來進資料列版本設定,可以對程式碼,音頻,視頻以及影像檔等,做版本控制。
目錄以及檔案是Subversion中可以記錄版本的對象。其主要工作原理如:
_ _ _ _ _ _ _ _ _ _
/ /
| |
| 項目倉庫 |
| |
/_ _ _ _ _ _ _ _ _ _/
/ |
/ check in |
check out / |
_ _ _ _ _ _ /_ _ _|_ _ _ _ _ _ _
/ / / /
| | | |
| 工作拷貝 | | 工作拷貝 |
| | | |
/_ _ _ _ _ _ _ _/ /_ _ _ _ _ _ _ _/
分支,主幹,合并,標籤
建立一個分支或者標籤時,採用一種"延遲拷貝"的技術,即只建立指向同一版本的連結,當其中某個檔案有所改動時,再去複製那個檔案或者目錄。
一般地來講,分支是用來做準備發布的,而不是並行開發。
1、建立一個項目倉庫
svnadmin create /home/huzza/test_svn
2、import初始檔案到項目倉庫中
svn import -m source_file_path URL
本例 URL:file:///home/huzza/test_svn/sesame/trunk
file:// ------> 告訴svn是本地目錄
3、checkout檔案到本地目錄
svn checkout(co) file:///home/huzza/test_svn/sesame/trunk
4、檢查檔案狀態或者日誌
svn status [檔案/目錄]
svn log [檔案/目錄]
svn log -r6:8 [檔案/目錄] 查看版本6到版本8之間的日誌
5、檔案/目錄比較(工作拷貝與項目創庫中的比較)
svn diff [檔案/目錄] 或者 svn diff --rHEAD [檔案/目錄] --rHEAD:表示最新版本
6、更新本地工作拷貝,提交工作修改
svn update(up) [檔案/目錄]
svn checkin(in) -m"comments" [檔案/目錄]
update時的一些檔案標誌:
U ------ 表示檔案被更新
G ------ 表示項目創庫中的檔案和本地工作拷貝的檔案合并到了一起
C ------ 表示合并時,有衝突產生
A ------ 新加入了一個檔案
D ------ 刪除了一個檔案
? ------ 表示該檔案或者目錄沒有被svn管理
M ------ 該檔案被修改
7、衝突。當svn update時,如果存在某個檔案存在衝突,開啟衝突的檔案,<<<<<<<< 和 >>>>>>>> 表明了衝突發生的地方。
當衝突發生時,如果想使用項目倉庫中的版本,而放棄本地拷貝的修改,可以使用以下命令:
a、svn revert [衝突的檔案/目錄]
b、svn update [衝突的檔案/目錄]
(svn resolved [檔案/目錄] && svn updata [檔案/目錄],似乎也是ok的,需要confirm一下)
如果想保留本地工作拷貝的修改,而放棄項目倉庫中版本的修改,可以如下:
a、cp 檔案/目錄.mine 檔案/目錄
b、svn resolved 檔案/目錄
c、svn ci -m "use my version please" 檔案/目錄
(在上面的三個步驟中,似乎不用做步驟a也可以達到目的)
8、使svn項目倉庫連網
啟動svn伺服器:svnserve --daemon --root /home/huzza/test_svn
列伺服器資源:svn list svn://192.168.0.4/sesame/trunk
出來後面的URL不同,其他動作的各部分均相同
svn+ssh 訪問:svn list svn+ssh://192.168.0.4/sesame/trunk (需要在伺服器上支援ssh訪問)
9、得到特定版本的工作拷貝
svn checkout -rVersionNum list svn://192.168.0.4/sesame/trunk butterfly
svn info butterfly (查看目前的版本拷貝的狀態)
10、拷貝/移動檔案
svn copy filename newfile
svn move oldfile newfile
svn ci -m "add or move some files" [修改檔案所在的目錄] (這裡確保伺服器上也作跟本地拷貝相同的動作)
11、版本的符號
HEAD --------- 項目倉庫中的最新版本
BASE --------- 工作拷貝的基準版本(也就是checkout出來時的版本)
COMMITTED ---- 最後一次checkin的版本
PREV --------- COMMITTED之前的一個版本
12、尋找版本之間的差異
svn diff -r2:4 [檔案/目錄]
svn diff > diffname.patch (產生patch檔案)
使用patch檔案: patch -p0 -i diffname.patch
13、刪除後一個版本對前一個版本的修改
svn merge -r27:26 [檔案/目錄] && svn ci -m "undo the work of version 27"
撤銷版本27所做的修改
14、建立分支/標籤
svn mkdir -m "Create branches" svn://192.168.0.4/sesame/branches
svn copy -m "Create release branches for version 1.0" svn://192.168.0.4/sesame/trunk /
svn://192.168.0.4/sesame/branches/release-1.0