SVN在linux下的使用筆記

轉貼:http://blog.csdn.net/nhczp/archive/2007/08/20/1751561.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 sesame

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章