svn命令行使用

文章來源: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 GuidBasic 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。
    注意,完成導入後,原目錄~/projects/hello並不轉換爲“工作副本(working copy)”,而且該項目已經轉由該倉庫接管,即該倉庫中已經包含了首次導入的工程的所有信息,與源目錄~/project/hello再無任何關係,我們完全可以刪除這一目錄而不必擔心丟失工程項目數據。注意,如果源目錄並不是一個“工作副本”,那麼就無法用svn進行管理,在其中所作的任何變動都無法提交到倉庫。
    要用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。
    現在工程倉庫中已經保存了上面所提交的版本2的工程的所有信息,因此,上面的“工作副本”也可以被刪除:當然,如果下次你還要繼續使用這個“工作副本”進行工作,則可以保留這個副本,不過需要注意的是,如果你是在一個開發團隊中,開發團隊的任一成員都可能在你不知情的情況下更新了工程版本,因此,在團隊開發中,進入已有的“工作副本”進行編輯前,應該先使用"svn update"命令將當前“工作副本”更新到倉庫中的最新版本。

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在線書籍,您還可以進入網絡社區或論壇與朋友進行更深入的討論。


感謝原博主的分享,謝謝!

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