天天看點

Linux下svn常用指令一、 SVN常用指令二、 SVN不常用指令三、 SVN其它指令四、SVN 常用指令一覽表

SVN(Subversion)是一個自由、開源的項目源代碼版本控制工具。目前,絕大多數開源軟體和企業代碼管理,都使用SVN作為代碼版本管理軟體。

Subversion将檔案存放在中心版本庫裡,這個版本庫很像一個普通的檔案伺服器。不同的是,它可以記錄每一次檔案和目錄的修改情況,這樣就可以在需要的復原時,将資料恢複到以前的版本,并可以檢視資料的更改細節。

SVN 官方網址:Apache Subversion

SVN 伺服器配置:安裝SVN伺服器

一、 SVN常用指令

1、Linux指令行下将檔案checkout到本地目錄

  svn checkout path(path是伺服器上的目錄)

  例如:svn checkout svn://192.168.1.1/pro/domain 

     (如果第一次使用svn,要使用 使用者名、 密碼:svn checkout svn://192.168.1.1/pro/domain user  password)

  簡寫:svn co

2、Linux指令行下往版本庫中添加新的檔案

  svn add file

  例如:svn add test.php(添加test.php)

  但是我add沒有成功,使用commit 成功了。見下一條

        svn add *.php(添加目前目錄下所有的php檔案)

3、Linux指令行下将改動的檔案送出到版本庫

  svn commit -m “LogMessage“ [-N] [--no-unlock] PATH(如果選擇了保持鎖,就使用–no-unlock開關)

  例如:svn commit -m “add test file for my test“ test.php

  簡寫:svn ci

4、Linux指令行下的加鎖/解鎖

  svn lock -m “LockMessage“ [--force] PATH

  例如:svn lock -m “lock test file“ test.php

  svn unlock PATH

5、Linux指令行下更新到某個版本

  svn update -r m path

  例如:

  svn update 如果後面沒有目錄,預設将目前目錄以及子目錄下的所有檔案都更新到最新版本。

  svn update -r 200 test.php(将版本庫中的檔案test.php還原到版本200)

  svn update test.php(更新,于版本庫同步。如果在送出的時候提示過期的話,是因為沖突,需要先update,修改檔案,然後清除svn resolved,最後再送出commit)

  簡寫:svn up

6、Linux指令行下檢視檔案或者目錄狀态

  1)svn status path(目錄下的檔案和子目錄的狀态,正常狀态不顯示)

  【?:不在svn的控制中;M:内容被修改;C:發生沖突;A:預定加入到版本庫;K:被鎖定】

  2)svn status -v path(顯示檔案和子目錄狀态)

  第一列保持相同,第二列顯示工作版本号,第三和第四列顯示最後一次修改的版本号和修改人。

  注:svn status、svn diff和 svn revert這三條指令在沒有網絡的情況下也可以執行的,原因是svn在本地的.svn中保留了本地版本的原始拷貝。

  簡寫:svn st

7、Linux指令行下删除檔案

  svn delete path -m “delete test fle“

  例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”

  或者直接svn delete test.php 然後再svn ci -m ‘delete test file‘,推薦使用這種

  簡寫:svn (del, remove, rm)

8、Linux指令行下檢視日志

  svn log path

  例如:svn log  test.php 顯示這個檔案的所有修改記錄,及其版本号的變化

9、Linux指令行下檢視檔案詳細資訊

  svn info path

  例如:svn info  test.php

10、Linux指令行下比較差異

  svn diff path(将修改的檔案與基礎版本比較)

  例如:svn diff  test.php

  svn diff -r m:n path(對版本m和版本n比較差異)

二、 SVN不常用指令

13、版本庫下的檔案和目錄清單

  svn list path    顯示path目錄下的所有屬于版本庫的檔案和目錄簡寫:svn ls

14、建立納入版本控制下的新目錄

svn mkdir: 建立納入版本控制下的新目錄。

用法: 

1、mkdir PATH...

每一個以工作副本 PATH 指定的目錄,都會建立在本地端,并且加入新增排程,以待下一次的送出。

2、mkdir URL... 建立版本控制的目錄。 

每個以URL指定的目錄,都會透過立即送出于倉庫中建立。在這兩個情況下,所有的中間目錄都必須事先存在。

15、恢複本地修改

svn revert: 恢複原始未改變的工作副本檔案 (恢複大部份的本地修改)。

用法: revert PATH... 注意: 本子指令不會存取網絡,并且會解除沖突的狀況。但是它不會恢複被删除的目錄

16、代碼庫URL變更

svn switch (sw): 更新工作副本至不同的URL。

用法: 

1、switch URL [PATH]        

更新你的工作副本,映射到一個新的URL,其行為跟“svn update”很像,也會将      伺服器上檔案與本地檔案合并。這是将工作副本對應到同一倉庫中某個分支或者标記的方法。 

2、switch --relocate FROM TO [PATH...]   

改寫工作副本的URL中繼資料,以反映單純的URL上的改變。當倉庫的根URL變動     (比如方案名或是主機名稱變動),但是工作副本仍舊對映到同一倉庫的同一目錄時使用     這個指令更新工作副本與倉庫的對應關系。

17、解決沖突

svn resolved: 移除工作副本的目錄或檔案的“沖突”狀态。

用法: resolved PATH... 注意: 本子指令不會依文法來解決沖突或是移除沖突标記;它隻是移除沖突的相關檔案,然後讓 PATH 可以再次送出。

18、輸出指定檔案或URL的内容。

svn cat 目标[@版本]...如果指定了版本,将從指定的版本開始查找。 svn cat -r PREV filename > filename (PREV 是上一版本,也可以寫具體版本号,這樣輸出結果是可以送出的)

三、 SVN其它指令

雖然不像本章先前讨論過的那些指令那麼常用,但是有時你也需要這些指令。 

svn cleanup

當Subversion修改你的工作副本時(或者任何在.svn中的資訊),它嘗試盡可能做到安全。在改變一個工作副本前,Subversion把它的意 圖寫到一個日志檔案中。接下來它執行日志檔案中的指令來應用要求的修改。最後,Subversion删除日志檔案。從架構上來說,這與一個日志檔案系統 (journaled filesystem)類似。如果一個 Subversion操作被打斷(例如,程序被殺掉了,或機器當掉了)了,日志檔案仍在硬碟上。重新執行日志檔案,Subversion可以完成先前開始 的操作,這樣你的工作副本能回到一個可靠的狀态。 

以下是svn cleanup所做的:它搜尋你的工作副本并執行所有遺留的日志,在這過程中删除鎖。如果Subversion曾告訴你你的工作副本的一部分被“鎖定”了,那麼你應該執行這個指令。另外, svn status會在鎖定的項前顯示L。 

$ svn status

L    somedir

M   somedir/foo.c 

$ svn cleanup

$ svn status

M      somedir/foo.c

svn import

使用svn import是把未版本化的檔案樹複制到資料庫的快速辦法,它需要建立一個臨時目錄。 

$ svnadmin create /usr/local/svn/newrepos

$ svn import mytree file:///usr/local/svn/newrepos/some/project

Adding         mytree/foo.c

Adding         mytree/bar.c

Adding         mytree/subdir

Adding         mytree/subdir/quux.h

Committed revision 1.

上面的例子把在some/project目錄下mytree目錄的内容複制到資料庫中。 

$ svn list file:///usr/local/svn/newrepos/some/project

bar.c

foo.c

subdir/

注意在導入完成後,原來的樹沒有被轉化成一個工作副本。為了開始工作,你仍然需要svn checkout這個樹的一個新的工作副本。

四、SVN 常用指令一覽表

指令 功能 使用格式
checkout 檢出 svn  co  URL
up 更新到目前URL的末端 svn  up
switch 更新到某一tag/branch svn  switch  (tag/分支)URL
add 增加 svn  add  檔案名
rm 删除檔案 svn  rm 檔案名
删除目錄 svn  rm 目錄名
diff 與base版本(最後檢出或者更新到的版本)對比 svn  diff
與版本庫中最新版本對比 svn  diff  -r  head
目前工作副本,兩個版本之間對比 svn  diff  -r  reversion1:reversion2
版本庫中任意兩個tag做對比 svn   diff    (tag1)URL    (tag2)URL
ci 送出 svn ci -m "commit log"
log 檢視目前工作副本log svn  log
隻檢視指定版本的log svn  log  -r
列印log所有附加資訊 svn  log  -v
檢視目前tag/branch版本詳情 svn  log --stop-on-copy -v
info 檢視目前工作副本所在URL svn  info
status 檢視工作副本的狀态 svn st
檢視檔案的taglist svn指令不支援,可執行cs taglist
tag 新增tag svn cp . (tag)URL
删除tag svn rm (tag)URL -m "commit log"
覆寫已經存在的tag 不支援
分支開發 建立branch svn  cp  (基線版本)URL (分支)URL  -m "commit log"
删除branch svn rm (分支)URL   -m "commit log"
同步 svn co (主幹)URL
cd ~/wc
svn merge (主幹)URL (待同步tag)URL
svn ci -m "commit log"
svn cp (主幹)URL (以_PD_BL_MAIN結尾的tag)URL -m"commit log"
合并 svn co (合并目标)URL
cd ~/wc
svn merge (基線版本tag)URL  (上線tag)URL
svn ci -m "commit log"
svn cp (合并目标)URL (上線tag_MERGE_的tag對應)URL -m"commit log"

SVN執行個體

删除目錄下所有的 .svn 隐藏子目錄

find

. -name ".svn" -print0 | 

xargs

-0 

rm

-rf

tags打分支

svn  cp  trunk/    tags/platform_2011.11.11    (或 svn  cp  http://192.168.1.100/platform/trunk/    http://192.168.1.100/platform/tags/platform_2011.11.11)

svn  ci  -m  "svn  cp  trunk/    tags/platform_2011.11.11"         // 送出,并給出送出記錄(-m  "svn  cp  trunk/    tags/platform_2011.11.11")

svn 改名

svn  mv  platform_2011.11.11   platform_20111111

svn  ci  -m  "svn  mv  platform_2011.11.11   platform_20111111"        // 送出

svn directory is missing

1) svn up missingDirName

2) svn del missingDirName

3) svn ci

svn chech version

svn  co  http://192.168.1.100/platform/branch  -r  12  platform_branch_v12

svn log

svn  log  http://192.168.1.100/platform/branch  -l10              // svn  文字注釋log

svn  log  http://192.168.1.100/platform/branch  -l10  -v          // svn 文字注釋log + 檔案更新log(增,删,改)

svn diff -r  v_1 : v_2 svn_path

svn diff -r 200:201 test.php

檢視svn版本

svnserve --version

ubuntu 安裝svn 1.7、1.8

目前 ubuntu 12.04 中的 svn 版本為 1.6,這個版本會在每個子目錄建立一個.svn 的目錄儲存版本檔案,很不爽。找到一個第三方編譯的 ubuntu 源:

1) 打開source.list源:

sudo vi /etc/apt/sources.list   

2) 添加源

deb http://ppa.launchpad.net/dominik-stadler/subversion-1.7/ubuntu precise main

deb-src http://ppa.launchpad.net/dominik-stadler/subversion-1.7/ubuntu precise main

Linux下svn常用指令一、 SVN常用指令二、 SVN不常用指令三、 SVN其它指令四、SVN 常用指令一覽表

3) 執行安裝指令

sudo apt-get install subversion

參考:http://blog.csdn.net/ithomer/article/details/6187464

繼續閱讀