重要:
SVN不是記錄每一個版本的實際內容,只是記錄版本間的差異
SVN使用延遲拷貝來實現svn copy,其只是原始檔案的一個連結,對拷貝的修改被svn記錄為相對於原始檔案的修改
1.建立存放庫
假設d:/dev/svnrepo為存放svn存放庫的目錄
svnadmin create d:/dev/svnrepo/test 建立一名為test的存放庫
2.匯入項目
假設你的項目在d:/dev/eclipse中的Test檔案夾,你的目前的目錄為d:/dev/eclipse,你的svn存放庫路徑為http://localhost/svn/test
svn import Test http://localhost/svn/test/OnlyTest -m "Initial Import"
解釋:匯入的是Test檔案夾下的內容
;另外,注意要起一個路徑名OnlyTest
,否則全匯入到http://localhost/svn/test下了;-m 為日誌
3.匯出項目
svn export <專案檔夾> <你的檔案夾>
svn export -r <version> <專案檔夾> <你的檔案夾>
-------------------------
4.取出
svn co(checkout) http://localhost/svn/test/OnlyTest --- 將OnlyTest檔案夾其下的檔案取出來並建立預設資料夾OnlyTest
svn co -r <url> -- 取出特定版本
svn co http://localhost/svn/test/OnlyTest MyTest -- 將OnlyTest檔案夾下的檔案取出,放入建立立的檔案夾MyTest中
5.添加
svn add * -- svn會將未納入版本控制的檔案加入版本控制中(必須svn commit)
svn add --non-recursive * 非遞迴添加
6.刪除
svn delete(rm,remove,del) <filename> -- 刪除檔案和目錄(必須svn commit)
7.提交
svn commit -m "you log" -- 提交
svn commit --changelist <changelist name> -- 提交指定的changelist
8.建立目錄
svn mkdir <dirname>
svn mkdir <url>
9.移動檔案或目錄
svn move <source_name> <dist_name>
svn move <source_url> <dist_url>
10.輸出特定檔案或URL的內容
svn cat <file or url> -- 輸出特定檔案或URL的內容
svn cat -r <version> <file or url>
------------------------------
11.顯示本地或遠程某一檔案或目錄的詳細資料
svn info <filename>
svn info -r <version> <filename>
12.列表
svn list(ls)
svn list -r <version>
13.目前的目錄或檔案的狀態
svn status <filename>
svn status --show-updates(或-u) 從項目存放庫中找出哪些檔案有更新
狀態:
第一列:指出條目的狀態
空 無改動
A 添加
C 衝突
D 刪除
G 合并
M 修改
X 無版本記錄,被svn:externals使用
? 未用版本控制管理
第二列:屬性狀態
空 無改動
C 衝突
M 修改
第三列:工作拷貝是否被鎖定
空 未鎖
L 鎖了
14.清理
svn cleanup -- 遞迴清理工作拷貝
15.協助
svn help
svn help <subcommand> -- 顯示子命令的協助,如:svn help add
-----------------------
18.鎖定某一目錄或檔案
svn propset svn:needs-lock true <二進位檔案> -- 設定需要鎖[svn會將其設定為唯讀,提示使用者編輯這個檔案前先加鎖]
svn lock <dir or file>
svn lock --force <dir or file> -- 強制對檔案加鎖,即使此檔案已被別人加鎖
19.解鎖
svn unlock <dir or file>
svn unlock --force <dir or file> -- 可以解鎖其他使用者鎖定的檔案
20.顯示特定檔案和URL每一行的作者和修訂版本資訊
svn blame <file or url> -- 每一行文本在開頭都放了最後修改的作者(使用者名稱)和修訂版本號碼。
svn blame -r <version> <file or url>
21.更新
svn update ----
把版本庫的修改帶到工作拷貝
svn update -r<version> -- 改變到某一個版本
狀態:
A 添加 add
D 刪除 delete
U 更新 update
C 衝突 conflict
M 合并 merge
22.找不同
svn diff <file> -- 找出工作版本和最後更新的版本中的不同
svn diff -c <version> <file> 查看檔案<file>
在修訂版本<version>修改的內容,是version和version-1比較
svn diff -r <version> <file> 察看你的工作拷貝對舊的修訂版本<version>的修改
svn diff -r <version1>:<version2> <file> 使用範圍符號來比較修訂版本<version1>和<version2>
svn diff -r <version1>:<version2> <url>
svn diff --changelist <changelist name>
23.拷貝
svn copy <source> <dist> -- 其中source和dist既可以是工作目錄檔案也可以是url
如:svn copy foo.txt bar.txt
svn copy near.txt file:///tmp/repos/test/far-away.txt -m "Remote copy."
svn copy file:///tmp/repos/test/far-away near-here
svn copy file:///tmp/repos/test/far-away file:///tmp/repos/test/over-there -m "remote copy."
24. 顯示提交日誌資訊
svn log -r <version> <path>
svn log -r <version1>:<version2> <path>
svn log <path>
svn log -r {iso8601日期} <path>
svn log -r {iso8601日期}:{iso8601日期} <path>
svn log -v <path> 顯示詳細的資訊(包括每個版本有哪些檔案有變動)
svn log --stop-on-copy <path> 得出分支是什麼時候建立的
25.刪除工作拷貝檔案或目錄的“衝突
”狀態(相關的衝突檔案檔案)
svn resolved <path>
26.取消所有的本地編輯
svn revert <path>
svn revert --recursive <path> 遞迴
27.解決衝突
svn resolve --accept <status> <path>
status:
base:選擇你更新你的工作拷貝前的你checkout出的未經修改的版本
working:手工處理後,選擇當前你工作拷貝中的版本
mine-full:選擇在你svn update前的工作拷貝
theirs-full:選擇svn update取出的檔案拷貝
28.將檔案放入到一個改變列表中
svn changelist(cl) <changelist name> <path1> <path2> <path...>
svn commit --changelist <changelist name> -- 只提交此change list的檔案
29.版本號碼標識
(1)號 87
(2){日期} {2009-09-09}
(3)HEAD 存放庫中最新版本
(4)BASE 工作拷貝中你最後簽出的版本
(5)COMMITED 最後改動版本,等於或早於BASE
(6)PREV COMMITED之前的一個版本
30.產生和應用補丁
svn diff > file.patch
patch <options> file.patch
31.svn項目組織
project/
trunk/ --主幹
branches/ --分支
tags/ --標籤
32.常用樣本
(1)提交改動
svn update -- 更新到項目的目前狀態
# resolve conflicts 解決衝突
編輯檔案
svn resolved
# run tests 運行測試
svn commit -m "your logs" -- 提交
(2)簡單bug修正
a.在一個分支中修正bug並提交
b.將其合并到存在此bug的其他分支中(svn merge -r<version1>:<version2>)
(3)複雜bug修正
a.建立一個bug修正分支(svn copy) name=bug-trackid
b.為這個修正分支在修正前打標籤(svn copy) name=bugpre-trackid
c.修正bug
d.為這個修正在修正後打標籤(svn copy) name=bugpost-trackid
e.合并此bug修正到其他分支(svn merge -r bugpre-trackid:bugpost-trackid)