SVN基礎用法

本文來自個人博客 sunyongfeng.com。博客的文章保持更新,此文可能不是最新狀態。

svn - Subversion command line client tool

這裏講SVN命令行客戶端工具如何使用,不涉及SVN服務器如何部署。

創建新分支

svn copy src_url [-r version] dst_url [-m "message"] [--username your_name --password your_password]

如果不帶-r version,則默認使用src_url的最新版本。version爲數字,版本號。
建議所有含提交功能的命令都要帶-m message,這樣才能通過log直接明瞭地看出這個版本提交了什麼修訂。

下載代碼

svn checkout url -r version

從服務器倉庫下載代碼到本地,成爲本地工作副本。

升級到新版本

svn update -r version

查看工作副本狀態

svn status

第一列表示文件的狀態:

  • ,沒有修訂
  • A,添加
  • C,衝突,需要解決衝突狀態,才能正常提交代碼。
  • D,刪除
  • I,忽略
  • M,有修改
  • ?,沒有版本控制,在工作副本添加文件或目錄之後,需要使用svn add your_path才能加該文件加到版本控制。
  • !,文件丟失,如果不是使用svn delete刪除文件或目錄,會產生此狀態。

添加新文件或目錄到版本控制

svn add file1 file2 ...
svn add dir ...  

使用Linux命令或在窗口下添加文件或目錄後,需要使用本命令,才能將添加的文件或目錄加入版本控制,svn提交時才能將該文件或目錄提交到服務器。

刪除文件或目錄

svn delete your_path

如果僅僅是手動使用rm命令或窗口下刪除工作副本內的文件或目錄,該刪除並不會記錄svn的狀態。可能會導致提交代碼時,遺漏了刪除文件或目錄。因此建議刪除svn工作副本內的文件或目錄時,使用本命令進行操作。

重命名文件或目錄

svn move src dst

問題svn move重命名文件之後,再用svn diff打patch會發現只能打進刪除文件的補丁,沒有新增文件的內容,目前還不清楚svn move要如何打patch。例如:

sunnogo@a3e420:~/src/test$ svn status
sunnogo@a3e420:~/src/test$ svn mv my.spec tmp.spec
A         tmp.spec
D         my.spec
sunnogo@a3e420:~/src/test$ svn status
D       my.spec
        > moved to tmp.spec
A  +    tmp.spec
        > moved from my.spec
sunnogo@a3e420:~/src/test$ svn diff
Index: my.spec
===================================================================
--- my.spec     (revision 11706)
+++ my.spec     (working copy)
@@ -1,27 +0,0 @@
-#ʹ����ȷ�������滻�ļ��а����ַ�'X'�ĵط�
-
-Summary: my packages
- 此處省略N行。
-%attr(755,root,root)
-/*
sunnogo@a3e420:~/src/test$ 

查看工作副本信息

svn info

能夠查看到本工作副本的url、版本等信息。

生成patch

svn diff [file_list]

將工作副本的修訂以patch的形式輸出,常使用svn diff > your_patch.patch輸出patch。

打某個版本的patch

svn diff -r ver1:ver2 [file_list]

查看某兩個版本中的修訂,如果ver1大於ver2,則所輸出的diff是回退代碼的patch;如果ver2大於ver1,則所輸出的patch是合併代碼的patch。

應用補丁

svn patch your_patch.patch

提交代碼

svn commit [-m message] [file_list]

如果沒有帶文件列表,則把工作副本的所有修訂都提交,如果有帶文件列表,則只提交文件列表中對應文件的修訂。

合併代碼

svn merge -r ver1:ver2 src_url working_copy_path

可將任意版本的任意修訂合併到工作副本中。如果ver1小於ver2,表示合併src_url分支ver1到ver2的修訂到本地工作副本;如果ver1大於ver2,表示回退修訂

另外也可以操作服務器倉庫,把working_copy_path直接換成目的分支的url即可,但是這種做法比較危險,不建議新手直接使用。

注意svn merge後的commit需要user同時擁有源分支和目的分支的權限才能提交。

回退工作副本的修訂

svn revert file1 file2 ...
svn revert -R dir

查看log

svn log [OPTIONS] [FILE_LIST]

會默認輸出所有的log,不實用,需要使用參數過濾才能得到我們想要的內容。
默認只查看工作副本及以前版本的log。

常用參數

  • -l n,只輸出n個log信息;
  • -v,顯示修訂的文件,默認不顯示;
  • -r ver,顯示特定版本的log;
  • -r ver1:ver2,顯示版本ver1到ver2之間所有提交的log;
  • -r {2013-01-01}:{2013-01-11},顯示日期間所有提交的log,-r選項的版本號和日期可以混用;
  • --diff,除顯示log信息外,還直接輸出修訂的內容;
  • --search,根據當前輸出的log信息,按關鍵字過濾log,該關鍵字可以匹配輸出信息的任意字符串,比如可匹配到提交者、提交的log信息,如果帶-v選項還可以匹配到修訂的文件等。
  • --stop-on-copy,只顯示當前分支的修訂的log,不會回溯源基線分支修訂的log。比如分支branch基於tags分支版本100創建,此時branch分支的svn log會默認顯示tags分支版本100以前所有修訂的log,而如果帶上本選項,則只會顯示branch分支自己修訂的log。

svn版本信息導入execl表

方法來自stackoverflow

Use the following Subversion command to create an xml file out of the repository's log:

  1. svn log -v --xml > repository_log.xml,還可以根據需求配搭其他的svn log選項。
  2. Import the xml file into an Excel spreadsheet (not sure if it will work with LibreOffice/OpenOffice).
  3. You can then save it as a spreadsheet.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章