文章來源:http://www.cnitblog.com/zouzheng/archive/2008/01/24/39280.html
svn命令行使用說明 Subversion的安裝與簡單使用
0、查看幫助
命令: svn help
1、同步(checkout)服務器數據到本地
命令: svn checkout <url> [directory]
svn co <url> [directory]
例:把 https://svn.test.cn/book/network/ 目錄同步到本地的 /usr/local/svn/book/network 目錄
# cd /usr/local/svn/book
# svn checkout https://svn.test.cn/book/network/
...
(R)eject, accept (t)emporarily or accept (p)ermanently? t
...
Password for 'wandering': <回車> # wandering是我當前登錄系統的帳號
Authentication realm: <https://svn.test.cn:443> book Subversion Repository
Username: jack
Password for 'jack': <password>
...
2、提交(commit)本地文檔到服務器
命令: svn commit -m "" [directory|file]
svn ci -m "" [directory|file]
例:把 /usr/local/svn/book/network/tcpip.txt 提交到服務器,前提是服務器上已經有此文件。
# cd /usr/local/svn/book/network/
# svn commit -m "" # -m是記錄的log信息,可以爲空
一般情況下,只要在需要更新的數據文件所在的目錄執行 svn ci -m "" 即可。
3、更新(update)服務器數據到本地
命令: svn update [directory|file]
svn up [directory|file]
例:把 https://svn.test.cn/book/network/ 目錄中的內容更新到本地
# cd /usr/local/svn/book/network
# cd update
4、查看日誌
命令: svn log [directory|file]
例:查看 /usr/local/svn/book/network 目錄的修改日誌
方法一:
# cd /usr/local/svn/book/network
# svn log
方法二:
# svn log /usr/local/svn/book/network
5、增加(add)本地數據到服務器
命令: svn add <directory|file>
Subversion的安裝與簡單使用
0 前言
Subversion是一個免費的開源的版本管理系統,它是作爲CVS(Concurrent Versions System)的取代品出現的。本文簡單介紹了Subversion在Fedora上的安裝過程及其基本概念和使用方法。您可以到O'Reilly出版的開源書籍Version Control
with Subversion的主頁在線閱讀(中、英文版本都有),以獲取更多信息。
1 在Fedora上安裝Subversion
[aaronwong@localhost ~]$ sudo yum -y install subversion [aaronwong@localhost ~]$ rpm -ql subversion //上面的命令可查詢subversion軟件包在系統上所安裝的文件列表 [aaronwong@localhost ~]$ sudo yum -y install mod_dav_svn //mod_dav_svn不是必須安裝的,它是Apache HTTP Server的一個插件,你本地倉庫(repository)的文件必須通過它才能在網絡上與別人共享。 //subversion的組件列表點此查看。 [aaronwong@localhost ~]$ svn --version svn,版本 1.4.3 (r23084) 編譯於 Mar 23 2007,09:29:55 版權所有 (C) 2000-2007 CollabNet。 Subversion 是開放源代碼軟件,請參閱 http://subversion.tigris.org/ 此產品包含由 CollabNet (http://www.Collab.Net/)開發的軟件。 可使用以下的倉庫存取 (RA) 模塊: * ra_dav : 通過WebDAV(DeltaV)協議訪問倉庫的模塊。 - 處理“http”方案 - 處理“https”方案 * ra_svn : 使用svn網絡協議訪問倉庫的模塊。 - 處理“svn”方案 * ra_local : 訪問本地磁盤的倉庫模塊。 - 處理“file”方案 |
2 使用Subversion管理本地project
作爲程序開發人員,我們沒有必要了解Subversion的所有特性的方方面面,我們的目的是使用它來對我們的project進行方便的簡單的版本管理,因此,強烈推薦閱讀Subversion Quick-Start Guid和Basic Usage。
以下是筆者參照上述Guide進行一個簡單的本地project的版本管理的示例。假定工程名爲hello。
(1)建立本地工程hello的subversion倉庫
Subversion把工程的各個版本的數據集中放在一個倉庫(repository)中。假定我們要建立一個本地工程,叫做hello,爲了使用subversion對它進行版本管理,首先要爲該工程建立一個倉庫。
[aaronwong@localhost ~]$ svnadmin create .subversion/repos/hello //subversion安裝後會生成一個~/.subversion目錄,這裏,我們將工程hello的數據倉庫建立在~/.subversion/repos/hello目錄。 [aaronwong@localhost ~]$ ls -p .subversion/repos/hello/ conf/ dav/ db/ format hooks/ locks/ README.txt |
(2)按照subversion的要求組建本地工程hello的工作目錄
假定工程hello的頂層目錄爲~/projects/hello(這裏~代表/home/aaronwong/),則應如下組建工程的工作目錄:
~/projects/hello/branches ~/projects/hello/tags ~/projects/hello/trunk/ hello.c |
//trunk目錄是實際上的工程頂層目錄,工程中的所有文件和文件夾都在該目錄下組織。 [aaronwong@localhost ~]$ cd projects/hello/ [aaronwong@localhost hello]$ ls -p branches/ tags/ trunk/ [aaronwong@localhost hello]$ cat trunk/hello.c //This is a original version. #include <stdio.h> int main() { printf("Hello world!\n"); } |
(3)將本地工程hello導入本地的Subversion的工程倉庫
由於是首次導入,因此要加信息-m "initial import"。
[aaronwong@localhost trunk]$ svn import ~/projects/hello/ file:///home/aaronwong/.subversion/repos/hello/ -m "initial improt" 新增 /home/aaronwong/projects/hello/trunk 新增 /home/aaronwong/projects/hello/trunk/hello.c 新增 /home/aaronwong/projects/hello/branches 新增 /home/aaronwong/projects/hello/tags 提交後的版本爲 1。 |
要用subversion對工程進行版本管理,那麼工程項目的開發必須在一個“工作副本”中進行,即首先要從倉庫獲取一個“工作副本”。
(4)工程開發過程中的版本管理與控制
使用subversion對工程進行版本管理的一般流程如下:
a)建立工程的數據倉庫,並導入工程的最初版本(前面已經完成);
b)從倉庫獲取一個“工作副本”(svn checkout,可以獲取最新版本也可以獲取以前的某個版本),在這個“工作副本”中進行工程開發,修改完畢將變動提交到倉庫。
下面簡單介紹b)步驟。
由於工程hello已經導入到倉庫,因此原目錄可以刪除。我們刪除原目錄,並從倉庫獲取工程hello的一個“工作副本”(working copy);當然,如果你當心這樣做會造成數據丟失,完全可以重新建立一個目錄,將“工作副本”保存到那裏。
[aaronwong@localhost projects]$ rm -rf hello/ [aaronwong@localhost projects]$ svn checkout file:///home/aaronwong/.subversion/repos/hello/trunk hello A hello/hello.c 取出版本 1。 //注意,我們用紅色標出了"trunk",如果不指定這一目錄,則會取出除工程源文件外的其他不必要的目錄如branches和tags。 [aaronwong@localhost projects]$ ls -a hello/ . .. hello.c .svn //可以看到“工作副本”下有一個.svn隱藏目錄,其中就包含了subversion用來進行版本管理的信息。 |
下面可以對工程hello的內容進行編輯和修改。注意,如果要在工程中增加或刪除某一文件或目錄(包括複製和移動),必須使用svn add/delete/mkdir/copy/move等相關命令進行標記。
[aaronwong@localhost hello]$ pwd /home/aaronwong/projects/hello [aaronwong@localhost hello]$ vim hello.c [aaronwong@localhost hello]$ cat hello.c //This is the second version. #include <stdio.h> int main() { printf("Hello world!\n"); return; } [aaronwong@localhost hello]$ mkdir doc [aaronwong@localhost hello]$ vim doc/readme.txt [aaronwong@localhost hello]$ svn add doc A doc A doc/readme.txt //說明:如果svn add的對象是一個目錄,則該目錄及其子目錄和其下的文件都會被添加到工程。 |
對工程編輯完畢,你可以檢查一下該次編輯對工程(實際上是對你的"工作副本")做了哪些改動。
[aaronwong@localhost hello]$ svn status M hello.c A doc A doc/readme.txt [aaronwong@localhost hello]$ svn diff Index: hello.c =================================================================== --- hello.c (版本 1) +++ hello.c (工作副本) @@ -1,10 +1,10 @@ -//This is a original version. +//This is the second version. #include <stdio.h> int main() { printf("Hello world!\n"); - + return; } Index: doc/readme.txt =================================================================== --- doc/readme.txt (版本 0) +++ doc/readme.txt (版本 0) @@ -0,0 +1,2 @@ +This is an example for subversion tutorial. + //可以看到,svn diff提供了更詳細的改動信息,並且很容易的將該命令的輸出重定向爲一個patch補丁。 |
檢查確認無誤後,便可提交此次更改,同時要附加此次更改的說明註釋信息。
[aaronwong@localhost hello]$ svn commit -m "documents added." 新增 doc 新增 doc/readme.txt 正在發送 hello.c 傳輸文件數據.. 提交後的版本爲 2。 |
3 使用svn獲取開源項目源代碼
這實際上是獲取一個“工作副本”的過程。例如我需要下載ffmpeg的最新源代碼,就可以使用svn checkout命令來完成:
[aaronwong@localhost ~]$ svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg A ffmpeg/configure A ffmpeg/Doxyfile A ffmpeg/ffmpeg.c A ffmpeg/vhook A ffmpeg/vhook/imlib2.c A ffmpeg/vhook/drawtext.c A ffmpeg/vhook/fish.c A ffmpeg/vhook/null.c ...... |
這篇文章僅僅是Subversion的使用入門,其實它的功能非常豐富和強大,如果你已經對它產生了興趣,強烈推薦您閱讀subversion在線書籍,您還可以進入網絡社區或論壇與朋友進行更深入的討論。
感謝原博主的分享,謝謝!