重要:
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 -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)