SVN命令行操作

svn命令行

svn命令 通常都有幫助,可通過如下方式查詢:

$ svn help

知道了子命令,但是不知道子命令的用法,還可以查詢:

$ svn help add

開發人員常用命令

(1) 導入項目

$ cd ~/project
$ mkdir -p svntest/{trunk,branches,tags}
$ svn import svntest 
https://localhost/test/svntest --message "Start project"
...
$ rm -rf svntest

我們新建一個項目svntest,在該項目下新建三個子目錄:trunk,開發主幹;branches,開發分支;tags,開發階段性標籤。然後導入到版本庫test下,然後把svntest拿掉。

(2) 導出項目

$ svn checkout https://localhost/test/svntest/trunk

修訂版本號的指定方式是每個開發人員必須瞭解的,以下是幾個參考例子,說明可參考svn推薦書。

$ svn diff --revision PREV:COMMITTED foo.c
# shows the last change committed to foo.c

$ svn log --revision HEAD
# shows log message for the latest repository commit

$ svn diff --revision HEAD
# compares your working file (with local changes) to the latest version
# in the repository

$ svn diff --revision BASE:HEAD foo.c
# compares your “pristine” foo.c (no local changes) with the
# latest version in the repository

$ svn log --revision BASE:HEAD
# shows all commit logs since you last updated

$ svn update --revision PREV foo.c
# rewinds the last change on foo.c
# (foo.c's working revision is decreased)

$ svn checkout --revision 3
# specified with revision number

$ svn checkout --revision {2002-02-17}
$ svn checkout --revision {15:30}
$ svn checkout --revision {15:30:00.200000}
$ svn checkout --revision {"2002-02-17 15:30"}
$ svn checkout --revision {"2002-02-17 15:30 +0230"}
$ svn checkout --revision {2002-02-17T15:30}
$ svn checkout --revision {2002-02-17T15:30Z}
$ svn checkout --revision {2002-02-17T15:30-04:00}
$ svn checkout --revision {20020217T1530}
$ svn checkout --revision {20020217T1530Z}
$ svn checkout --revision {20020217T1530-0500}

(3) 日常指令

$ svn update

$ svn add foo.file
$ svn add foo1.dir
$ svn add foo2.dir --non-recursive
$ svn delete README
$ svn copy foo bar
$ svn move foo1 bar1

$ svn status
$ svn status --verbose
$ svn status --verbose --show-updates
$ svn status stuff/fox.c

$ svn diff
$ svn diff > patchfile

$ svn revert README
$ svn revert

修改衝突發生時,會生成三個文件:.mine, .rOLDREV, .rNEWREV。比如:

$ ls -l
sandwich.txt
sandwich.txt.mine
sandwich.txt.r1
sandwich.txt.r2

解決修改衝突方式之一:修改衝突的文件sandwich.txt,然後運行命令:

$ svn resolved sandwich.txt

方式之二:用庫裏的新版本覆蓋你的修改:

$ cp sandwich.txt.r2 sandwich.txt
$ svn resolved sandwich.txt

方式之三:撤銷你的修改,這種方式不需要運行resolved子命令:

$ svn revert sandwich.txt
Reverted 'sandwich.txt'
$ ls sandwich.*
sandwich.txt

確保沒問題後,就可以提交了。

$ svn commit --message "Correct some fatal problems"
$ svn commit --file logmsg
$ svn commit

(4) 檢驗版本歷史

$ svn log
$ svn log --revision 5:19
$ svn log foo.c
$ svn log -r 8 -v

$ svn diff
$ svn diff --revision 3 rules.txt
$ svn diff --revision 2:3 rules.txt
$ svn diff --revision 4:5 
http://svn.red-bean.com/repos/example/trunk/text/rules.txt

$ svn cat --revision 2 rules.txt
$ svn cat --revision 2 rules.txt > rules.txt.v2

$ svn list http://svn.collab.net/repos/svn
$ svn list --verbose http://svn.collab.net/repos/svn

$ svn checkout --revision 1729 # Checks out a new working copy at r1729

$ svn update --revision 1729 # Updates an existing working copy to r1729

(5) 其他有用的命令

svn cleanup

爲失敗的事務清場。

(6) 分支和合並

建立分支方法一:先checkout然後做拷貝,最後提交拷貝。

$ svn checkout http://svn.example.com/repos/calc bigwc
A bigwc/trunk/
A bigwc/trunk/Makefile
A bigwc/trunk/integer.c
A bigwc/trunk/button.c
A bigwc/branches/
Checked out revision 340.

$ cd bigwc
$ svn copy trunk branches/my-calc-branch
$ svn status
A + branches/my-calc-branch

$ svn commit -m "Creating a private branch of /calc/trunk."
Adding branches/my-calc-branch
Committed revision 341.

建立分支方法二:直接遠程拷貝。

$ svn copy http://svn.example.com/repos/calc/trunk /
http://svn.example.com/repos/calc/branches/my-calc-branch /
-m "Creating a private branch of /calc/trunk."

Committed revision 341.

建立分支後,你可以把分支checkout並繼續你的開發。

$ svn checkout http://svn.example.com/repos/calc/branches/my-calc-branch

假設你已經checkout了主幹,現在想切換到某個分支開發,可做如下的操作:

$ cd calc
$ svn info | grep URL
URL: 
http://svn.example.com/repos/calc/trunk
$ svn switch http://svn.example.com/repos/calc/branches/my-calc-branch
U integer.c
U button.c
U Makefile
Updated to revision 341.
$ svn info | grep URL
URL: 
http://svn.example.com/repos/calc/branches/my-calc-branch

合併文件的命令參考:

$ svn diff -r 343:344 http://svn.example.com/repos/calc/trunk
$ svn merge -r 343:344 http://svn.example.com/repos/calc/trunk
$ svn commit -m "integer.c: ported r344 (spelling fixes) from trunk."
$ svn merge -r 343:344 
http://svn.example.com/repos/calc/trunk my-calc-branch
$ svn merge 
http://svn.example.com/repos/branch1@150 /
http://svn.example.com/repos/branch2@212 /
my-working-copy
$ svn merge -r 100:200 
http://svn.example.com/repos/trunk my-working-copy
$ svn merge -r 100:200 
http://svn.example.com/repos/trunk
$ svn merge --dry-run -r 343:344 http://svn.example.com/repos/calc/trunk

最後一條命令僅僅做合併測試,並不執行合併操作。

建立標籤和建立分支沒什麼區別,不過是拷貝到不同的目錄而已。

$ svn copy http://svn.example.com/repos/calc/trunk /
http://svn.example.com/repos/calc/tags/release-1.0 /
-m "Tagging the 1.0 release of the 'calc' project."

$ ls
my-working-copy/
$ svn copy my-working-copy 
http://svn.example.com/repos/calc/tags/mytag
Committed revision 352.

後一種方式直接把本地的工作拷貝複製爲標籤。

此外,你還可以刪除某個分支。

$ svn delete http://svn.example.com/repos/calc/branches/my-calc-branch /
-m "Removing obsolete branch of calc project."

管理人員常用命令

(7) 版本庫管理

$ svnadmin help
...
$ svnadmin help create
...
$ svnadmin create --fs-type bdb /usr/local/repository/svn/test
$ chown -R svn.svn /usr/local/repository/svn/test

建立版本庫,庫類型爲bdb(使用Berkeley DB做倉庫),庫名稱爲test。
svn版本庫有兩種存儲方式:基於Berkeley DB(bdb)或者基於文件系統(fsfs),通過 –fs-type可指定存儲方式。

(8) 查詢版本庫信息

$ svnlook help
...
$ svnlook help tree
...
$ svnlook tree /usr/local/repository/svn/test --show-ids

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