svn常用命令集合
svn基本的操作流程就是:
你剛剛進入一個新的公司,讓你接手一個正在進行的項目,你打開終端寫下了:svn co?svn://192.168.1.1/pro/domain 然后就可以在當前目錄里面找到一個叫domain的項目,cd domain,你瀏覽了幾行代碼,太特么的竟然有bug,你忍不住改了,你要提交了,svn ci -m 'something' ?,成功。你又在domain下得app文件夾下添加了幾個.php文件,把整個項目都做完了!你又打開終端:svn add domain/app/*.php 添加成功。太牛逼了,下班了,你去吃了一碗自己最喜歡的老壇酸菜味方便面。
以下是一些常用命令
1、將文件checkout到本地目錄
1 svn checkout path(path是服務器上的目錄) 2 例如:svn checkout svn://192.168.1.1/pro/domain 3 簡寫:svn co2、往版本庫中添加新的文件
1 svn add file 2 例如:svn add test.php(添加test.php) 3 svn add *.php(添加當前目錄下所有的php文件)3、將改動的文件提交到版本庫
1 svn commit -m “LogMessage“ [-N] [--no-unlock] PATH (如果選擇了保持鎖,就使用–no-unlock開關) 2 例如:svn commit -m “add test file for my test“ test.php 3 簡寫:svn ci4、加鎖/解鎖
1 svn lock -m “LockMessage“ [--force] PATH 2 例如:svn lock -m “lock test file“ test.php 3 svn unlock PATH5、更新到某個版本
1 svn update -r m path 2 例如: 3 svn update如果后面沒有目錄,默認將當前目錄以及子目錄下的所有文件都更新到最新版本。 4 svn update -r 200 test.php(將版本庫中的文件test.php還原到版本200) 5 svn update test.php(更新,于版本庫同步。如果在提交的時候提示過期的話,是因為沖突,需要先update,修改文件,然后清除svn resolved,最后再提交commit) 6 簡寫:svn up6、查看文件或者目錄狀態
1 1)svn status path(目錄下的文件和子目錄的狀態,正常狀態不顯示) 2 【?:不在svn的控制中;M:內容被修改;C:發生沖突;A:預定加入到版本庫;K:被鎖定】 3 2)svn status -v path(顯示文件和子目錄狀態) 4 第一列保持相同,第二列顯示工作版本號,第三和第四列顯示最后一次修改的版本號和修改人。 5 注:svn status、svn diff和 svn revert這三條命令在沒有網絡的情況下也可以執行的,原因是svn在本地的.svn中保留了本地版本的原始拷貝。 6 簡寫:svn st7、刪除文件
1 svn delete path -m “delete test fle“ 2 例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file” 3 或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推薦使用這種 4 簡寫:svn (del, remove, rm)8、查看日志
?
1 svn log path 2 例如:svn log test.php 顯示這個文件的所有修改記錄,及其版本號的變化?
9、查看文件詳細信息
?
1 svn info path 2 例如:svn info test.php?
10、比較差異
?
1 svn diff path(將修改的文件與基礎版本比較) 2 例如:svn diff test.php 3 svn diff -r m:n path(對版本m和版本n比較差異) 4 例如:svn diff -r 200:201 test.php 5 簡寫:svn di?
11、將兩個版本之間的差異合并到當前文件
?
1 svn merge -r m:n path 2 例如:svn merge -r 200:205 test.php(將版本200與205之間的差異合并到當前文件,但是一般都會產生沖突,需要處理一下)?
12、SVN 幫助
?
1 svn help 2 svn help ci13、版本庫下的文件和目錄列表
1 svn list path 2 顯示path目錄下的所有屬于版本庫的文件和目錄 3 簡寫:svn ls14、創建納入版本控制下的新目錄
?
1 svn mkdir: 創建納入版本控制下的新目錄。 2 用法: 1、mkdir PATH… 3 2、mkdir URL… 4 創建版本控制的目錄。 5 1、每一個以工作副本 PATH 指定的目錄,都會創建在本地端,并且加入新增 6 調度,以待下一次的提交。 7 2、每個以URL指定的目錄,都會透過立即提交于倉庫中創建。 8 在這兩個情況下,所有的中間目錄都必須事先存在?
15、恢復本地修改
?
1 svn revert: 恢復原始未改變的工作副本文件 (恢復大部份的本地修改)。revert: 2 用法: revert PATH… 3 注意: 本子命令不會存取網絡,并且會解除沖突的狀況。但是它不會恢復 4 被刪除的目錄?
16、代碼庫URL變更
?
1 svn switch (sw): 更新工作副本至不同的URL。2 用法: 1、switch URL [PATH]3 2、switch –relocate FROM TO [PATH...]4 5 1、更新你的工作副本,映射到一個新的URL,其行為跟“svn update”很像,也會將6 服務器上文件與本地文件合并。這是將工作副本對應到同一倉庫中某個分支或者標記的7 方法。8 2、改寫工作副本的URL元數據,以反映單純的URL上的改變。當倉庫的根URL變動9 (比如方案名或是主機名稱變動),但是工作副本仍舊對映到同一倉庫的同一目錄時使用 10 這個命令更新工作副本與倉庫的對應關系。?
17、解決沖突
1 svn resolved: 移除工作副本的目錄或文件的“沖突”狀態。 2 用法: resolved PATH… 3 注意: 本子命令不會依語法來解決沖突或是移除沖突標記;它只是移除沖突的 4 相關文件,然后讓 PATH 可以再次提交?
?
?
查看修改的文件記錄
svn cat -- 顯示特定版本的某文件內容。
svn list -- 顯示一個目錄或某一版本存在的文件列表。
svn log -- 顯示svn 的版本log,含作者、日期、路徑等。
svn diff -- 顯示特定修改的行級詳細信息。
list示例:
svn list http://svn.test.com/svn #查看目錄中的文件。 svn list -v http://svn.test.com/svn #查看詳細的目錄的信息(修訂人,版本號,文件大小等)。 svn list [-v] #查看當前當前工作拷貝的版本庫URL。cat示例:
svn cat -r 4 test.c #查看版本4中的文件test.c的內容,不進行比較。diff示例:
svn diff #什么都不加,會堅持本地代碼和緩存在本地.svn目錄下的信息的不同;信息太多,沒啥用處。 svn diff -r 3 #比較你的本地代碼和版本號為3的所有文件的不同。 svn diff -r 3 text.c #比較你的本地代碼和版本號為3的text.c文件的不同。 svn diff -r 5:6 #比較版本5和版本6之間所有文件的不同。 svn diff -r 5:6 text.c #比較版本5和版本6之間的text.c文件的變化。 svn diff -c 6 test.c #比較版本5和版本6之間的text.c文件的變化。log示例:
svn log #什么都不加會顯示所有版本commit的日志信息:版本、作者、日期、comment。 svn log -r 4:20 #只看版本4到版本20的日志信息,順序顯示。 svn log -r 20:5 #顯示版本20到4之間的日志信息,逆序顯示。 svn log test.c #查看文件test.c的日志修改信息。 svn?log -r 8 -v #顯示版本8的詳細修改日志,包括修改的所有文件列表信息。 svn log -r 8 -v -q #顯示版本8的詳細提交日志,不包括comment。 svn log -v -r 88:866 #顯示從版本88到版本866之間,當前代碼目錄下所有變更的詳細信息 。 svn log -v dir #查看目錄的日志修改信息,需要加v。 svn?log http://foo.com/svn/trunk/code/ #顯示代碼目錄的日志信息。常用命令
svn add file|dir -- 添加文件或整個目錄
svn checkout -- 獲取svn代碼
svn?commit ?-- 提交本地修改代碼
svn status ? ?-- 查看本地修改代碼情況:修改的或本地獨有的文件詳細信息
svn merge ? -- 合并svn和本地代碼
svn revert ? -- 撤銷本地修改代碼
svn?resolve -- 合并沖突代碼
svn help [command] -- 查看svn幫助,或特定命令幫助
svn diff個性化定制
svn配置文件:?~/.subversion/config
修改~/.subversion/config,找到如下配置行:
# diff-cmd = diff_program (diff, gdiff, etc.)將上面那個腳本的路徑添加進去就行,修改為
diff-cmd = /usr/local/bin/diffwrap.sh #絕對路徑這樣svn diff命令就會默認使用vimdiff比較文件。
diffwrap.sh文件
#! /bin/bash# for svn diff: 修改~/.subversion/config,找到如下配置行: # diff-cmd = diff_program (diff, gdiff, etc.) # diff-cmd = ~/bin/diffwrap.sh# 參數大于5時,去掉前5個參數;參數小于5,失敗,什么也不做 shift 5# 使用vimdiff比較 vimdiff "$@"參考文獻
使用vimdiff作為svn diff的查看代碼工具:http://www.cnblogs.com/xuxm2007/archive/2012/05/11/2496243.html
SVN常用命令:?http://blog.csdn.net/sunboy_2050/article/details/6187464
?
?
?
svn 常用操作命令
svn 常用操作命令
檢出
svn checkout http://路徑(目錄或文件的全路徑) [本地目錄全路徑] --username 用戶名 svn checkout svn://路徑(目錄或文件的全路徑) [本地目錄全路徑] --username 用戶名# 例子: svn co svn://localhost/測試工具 /home/testtools --username wzhnsc svn co http://localhost/test/testapp --username wzhnsc svn checkout svn://localhost/測試工具 /home/testtools --username wzhnsc svn checkouthttp://localhost/test/testapp --username wzhnsc注:如果不帶--password 參數傳輸密碼的話,會提示輸入密碼,建議不要用明文的--password 選項。
其中 username 與 password前是兩個短線,不是一個。
不指定本地目錄全路徑,則檢出到當前目錄下。
導出(導出一個干凈的不帶.svn文件夾的目錄樹)
svn export [-r 版本號] http://路徑(目錄或文件的全路徑) [本地目錄全路徑] --username 用戶名 svn export [-r 版本號] svn://路徑(目錄或文件的全路徑) [本地目錄全路徑] --username 用戶名 svn export 本地檢出的(即帶有.svn文件夾的)目錄全路徑 要導出的本地目錄全路徑例子: svn export svn://localhost/測試工具 /home/testtools --username wzhnsc svn export svn://localhost/test/testapp --username wzhnsc svn export /home/testapp /home/testtools注:第一種從版本庫導出干凈工作目錄樹的形式是指定URL,
如果指定了修訂版本號,會導出相應的版本,
如果沒有指定修訂版本,則會導出最新的,導出到指定位置。
如果省略 本地目錄全路徑,URL的最后一部分會作為本地目錄的名字。
第二種形式是指定 本地檢出的目錄全路徑 到 要導出的本地目錄全路徑,所有的本地修改將會保留,
但是不在版本控制下(即沒提交的新文件,因為.svn文件夾里沒有與之相關的信息記錄)的文件不會拷貝。
添加新文件
svn add 文件名 注:告訴SVN服務器要添加文件了,還要用svn commint -m真實的上傳上去! 例子: svn add test.php <- 添加test.php svn commit -m “添加我的測試用test.php“ test.php svn add *.php <- 添加當前目錄下所有的php文件 svn commit -m “添加我的測試用全部php文件“ *.php提交
svn commit -m “提交備注信息文本“ [-N] [--no-unlock] 文件名 svn ci -m “提交備注信息文本“ [-N] [--no-unlock] 文件名 必須帶上-m參數,參數可以為空,但是必須寫上-m 例子: svn commit -m “提交當前目錄下的全部在版本控制下的文件“ * <- 注意這個*表示全部文件 svn commit -m “提交我的測試用test.php“ test.php svn commit -m “提交我的測試用test.php“ -N --no-unlock test.php <- 保持鎖就用–no-unlock開關 svn ci -m “提交當前目錄下的全部在版本控制下的文件“ * <- 注意這個*表示全部文件 svn ci -m “提交我的測試用test.php“ test.php svn ci -m “提交我的測試用test.php“ -N --no-unlock test.php <- 保持鎖就用–no-unlock開關更新文件
svn update svn update -r 修正版本 文件名 svn update 文件名 例子: svn update <- 后面沒有目錄,默認將當前目錄以及子目錄下的所有文件都更新到最新版本 svn update -r 200 test.cpp <- 將版本庫中的文件 test.cpp 還原到修正版本(revision)200 svn update test.php <- 更新與版本庫同步。提交的時候提示過期沖突,需要先 update 修改文件,然后清除svn resolved,最后再提交commit。刪除文件
svn delete svn://路徑(目錄或文件的全路徑) -m “刪除備注信息文本” 推薦如下操作: svn delete 文件名 svn ci -m “刪除備注信息文本” 例子: svn delete svn://localhost/testapp/test.php -m “刪除測試文件test.php” 推薦如下操作: svn delete test.php svn ci -m “刪除測試文件test.php”加鎖/解鎖
svn lock -m “加鎖備注信息文本“ [--force] 文件名 svn unlock 文件名 例子: svn lock -m “鎖信測試用test.php文件“ test.php svn unlock test.php比較差異
svn diff 文件名 svn diff -r 修正版本號m:修正版本號n 文件名 例子: svn diff test.php<- 將修改的文件與基礎版本比較 svn diff -r 200:201 test.php<- 對 修正版本號200 和 修正版本號201 比較差異查看文件或者目錄狀態
svn st 目錄路徑/名 svn status 目錄路徑/名<- 目錄下的文件和子目錄的狀態,正常狀態不顯示 【?:不在svn的控制中; M:內容被修改;C:發生沖突;A:預定加入到版本庫;K:被鎖定】 svn -v 目錄路徑/名 svn status -v 目錄路徑/名<- 顯示文件和子目錄狀態【第一列保持相同,第二列顯示工作版本號,第三和第四列顯示最后一次修改的版本號和修改人】注:svn status、svn diff和 svn revert這三條命令在沒有網絡的情況下也可以執行的,
原因是svn在本地的.svn中保留了本地版本的原始拷貝。
查看日志
svn log 文件名 例子: svn log test.php<- 顯示這個文件的所有修改記錄,及其版本號的變化查看文件詳細信息
svn info 文件名 例子: svn info test.phpSVN 幫助
svn help <- 全部功能選項 svn help ci <- 具體功能的說明查看版本庫下的文件和目錄列表
svn list svn://路徑(目錄或文件的全路徑) svn ls svn://路徑(目錄或文件的全路徑) 例子: svn list svn://localhost/test svn ls svn://localhost/test <- 顯示svn://localhost/test目錄下的所有屬于版本庫的文件和目錄創建納入版本控制下的新目錄
svn mkdir 目錄名 svn mkdir -m "新增目錄備注文本" http://目錄全路徑 例子: svn mkdir newdir svn mkdir -m "Making a new dir." svn://localhost/test/newdir注:添加完子目錄后,一定要回到根目錄更新一下,不然在該目錄下提交文件會提示“提交失敗”
svn update注:如果手工在checkout出來的目錄里創建了一個新文件夾newsubdir,
再用svn mkdir newsubdir命令后,SVN會提示:
svn: 嘗試用 “svn add”或 “svn add --non-recursive”代替?
svn: 無法創建目錄“hello”: 文件已經存在
此時,用如下命令解決:
svn add --non-recursive newsubdir
在進入這個newsubdir文件夾,用ls -a查看它下面的全部目錄與文件,會發現多了:.svn目錄
再用 svn mkdir -m "添hello功能模塊文件" svn://localhost/test/newdir/newsubdir 命令,
SVN提示:
svn: File already exists: filesystem '/data/svnroot/test/db', transaction '4541-1',
path '/newdir/newsubdir '
恢復本地修改
svn revert [--recursive] 文件名 注意: 本子命令不會存取網絡,并且會解除沖突的狀況。但是它不會恢復被刪除的目錄。 例子: svn revert foo.c <- 丟棄對一個文件的修改 svn revert --recursive . <-恢復一整個目錄的文件,. 為當前目錄把工作拷貝更新到別的URL
svn switch http://目錄全路徑 本地目錄全路徑 例子: svn switch http://localhost/test/456 . <- (原為123的分支)當前所在目錄分支到localhost/test/456解決沖突
svn resolved [本地目錄全路徑] 例子: $ svn update C foo.c Updated to revision 31. 如果你在更新時得到沖突,你的工作拷貝會產生三個新的文件: $ ls foo.c foo.c.mine foo.c.r30 foo.c.r31 當你解決了foo.c的沖突,并且準備提交,運行svn resolved讓你的工作拷貝知道你已經完成了所有事情。 你可以僅僅刪除沖突的文件并且提交,但是svn resolved除了刪除沖突文件,還修正了一些記錄在工作拷貝管理區域的記錄數據,所以我們推薦你使用這個命令。不checkout而查看輸出特定文件或URL的內容
svn cat http://文件全路徑 例子: svn cat http://localhost/test/readme.txt 19、新建一個分支copy svn copy branchA branchB -m "make B branch" // 從branchA拷貝出一個新分支branchB 20、合并內容到分支merge svn merge branchA branchB // 把對branchA的修改合并到分支branchB?
1、將文件checkout到本地目錄
?
? svn checkout path(path是服務器上的目錄)
?? 例如:svn checkout svn://192.168.1.1/pro/domain
?
?? 簡寫:svn co
?
2、往版本庫中添加新的文件
?
? svn add file
? 例如:svn add test.php(添加test.php)
? svn add *.php(添加當前目錄下所有的php文件)
?
3、將改動的文件提交到版本庫
?
? svn commit -m "LogMessage" [-N] [--no-unlock] PATH(如果選擇了保持鎖,就使用--no-unlock開關)
?? 例如:svn commit -m "add test file for my test" test.php
?? 簡寫:svn ci
?
4、加鎖/解鎖
?
? svn lock -m "LockMessage" [--force] PATH
? 例如:svn lock -m "lock test file" test.php
? svn unlock PATH
?
5、更新到某個版本
?
? 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、查看文件或者目錄狀態
?
? 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、刪除文件
?
? 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、查看日志
?
? svn log path
? 例如:svn log test.php 顯示這個文件的所有修改記錄,及其版本號的變化
?
9、查看文件詳細信息
?
? svn info path
? 例如:svn info test.php
10、比較差異
?
? svn diff path(將修改的文件與基礎版本比較)
? 例如:svn diff test.php
?????? svn diff -r m:n path(對版本m和版本n比較差異)
? 例如:svn diff -r 200:201 test.php
? 簡寫:svn di
?
11、將兩個版本之間的差異合并到當前文件
?
? svn merge -r m:n path
? 例如:svn merge -r 200:205 test.php(將版本200與205之間的差異合并到當前文件,但是一般都會產生沖突,需要處理一下)
?? ?
12、SVN 幫助
?
? svn help
? svn help ci
?
------------------------------------------------------------------------------
?
以上是常用命令,下面寫幾個不經常用的
?
------------------------------------------------------------------------------
?
13、版本庫下的文件和目錄列表
?
? svn list path
? 顯示path目錄下的所有屬于版本庫的文件和目錄
? 簡寫:svn ls?
?
14、創建納入版本控制下的新目錄
?
? svn mkdir: 創建納入版本控制下的新目錄。
? 用法: 1、mkdir PATH...
?????? 2、mkdir URL...
?
15、恢復本地修改
?
?? svn revert: 恢復原始未改變的工作副本文件 (恢復大部份的本地修改)。revert:
?? 用法: revert PATH...
?? 注意: 本子命令不會存取網絡,并且會解除沖突的狀況。但是它不會恢復
??????? 被刪除的目錄
?
16、代碼庫URL變更
?
??? svn switch (sw): 更新工作副本至不同的URL。
??? 用法: 1、switch URL [PATH]
????????? 2、switch --relocate FROM TO [PATH...]
?
????????? 1、更新你的工作副本,映射到一個新的URL,其行為跟“svn update”很像,也會將
???????????? 服務器上文件與本地文件合并。這是將工作副本對應到同一倉庫中某個分支或者標記的
???????????? 方法。
????????? 2、改寫工作副本的URL元數據,以反映單純的URL上的改變。當倉庫的根URL變動
???????????? (比如方案名或是主機名稱變動),但是工作副本仍舊對映到同一倉庫的同一目錄時使用
???????????? 這個命令更新工作副本與倉庫的對應關系。
?
17、解決沖突
?
?? svn resolved: 移除工作副本的目錄或文件的“沖突”狀態。
?? 用法: resolved PATH...
?? 注意: 本子命令不會依語法來解決沖突或是移除沖突標記;它只是移除沖突的
?? 相關文件,然后讓 PATH 可以再次提交。
?
18、輸出指定文件或URL的內容。
?
? svn cat 目標[@版本]...如果指定了版本,將從指定的版本開始查找。
? svn cat -r PREV filename > filename (PREV 是上一版本,也可以寫具體版本號,這樣輸出結果是可以提交的)
?
總結