本文總結了完成一個需求開發所需知道的SVN基本指令。
一般開發流程
各環節SVN基本命令
獲取代碼(更新代碼)
第一次從倉庫裏獲取代碼
$ svn checkout [your_repository_url]
如果已有本地代碼,則需要更新代碼,確保在最新代碼上開發
$ cd [your_local_codes_path]
$ svn update
新建分支
SVN倉庫中,trunk分支一般存放通過測試的最新代碼,因此不應該在該分支下修改代碼。合理的做法是:從trunk分支切出一個feature分支,然後在該分支下修改代碼,直到測試通過後合併到trunk分支。
建立分支
$ svn copy [your_trunk_url] [your_feature_branch_url] -m [your_log]
-m
填寫建立分支的日誌
切換分支
從trunk分支切換到feature分支
$ svn switch [your_feature_branch_url]
查看分支
切換分支後就可以進行代碼修改。修改一段時間後,如果想了解當前分支文件的狀態,可以通過以下命令:
$ svn status
該命令顯示的格式爲:狀態 文件,常見的狀態有:
字符 | 狀態 | 說明 |
---|---|---|
A | 添加 | 與上一版相比增加的文件 |
C | 衝突 | 該文件衝突 |
D | 刪除 | 該文件已從倉庫刪除,以後SVN不再跟蹤版本 |
M | 修改 | 該文件被修改過 |
S | 處於其他分支 | 當前分支的子路徑處於其他分支 |
? | 未納入版本管理 | 通常是新增文件,SVN還沒跟蹤該文件的版本。可以使用svn add 把文件加入SVN,此時再運行svn status 時,文件的狀態就顯示爲A |
! | 文件缺失 | SVN找不到該文件。一般出現在沒有使用SVN命令刪除文件的情況。當需要從倉庫刪除某文件時,應該使用svn delete ,這樣文件的狀態就變爲D,提交以後該文件的版本就不再被跟蹤 |
提交分支(解決衝突)
開發完成後向遠程分支提交代碼
$ svn commit -m [your_log]
一般情況下代碼就提交到遠程分支了,但是如果有人和你修改了同一段代碼,並且先提交到了遠程分支,就會導致本次提交失敗,此時需要先解決衝突再提交代碼。
解決衝突
更新代碼,顯示衝突
$ svn update
$ Conflict discovered in [your file]
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tf) theirs-conflict,
(s) show all options:
符號 | 說明 |
---|---|
p | 標記衝突,暫不處理 |
df | 顯示所有衝突 |
e | 編輯衝突 |
mc | 衝突以本地文件爲準 |
tf | 衝突以遠程倉庫爲準 |
s | 顯示所有選項 |
一般先輸入df
命令看衝突是否嚴重,如果不嚴重則通過e
直接編輯,編輯頁面通常爲
<<<<<<< .mine
[your_version]
=======
[their_version]
>>>>>>> [version]
在<<<<<<< .mine
和>>>>>>> [version]
之間解決衝突,然後保存。回到Select界面,此時會多出一個(r) resolve
的命令。輸入r
通知SVN已解決衝突。
使用postpone解決衝突
如果衝突很嚴重,需要和提交者討論解決,可以輸入p
標記,此時輸入svn status
顯示:
C [your_file]
? [your_file].working
? [your_file].merge-left.[version]
? [your_file].merge-right.[version]
文件 | 說明 |
---|---|
[your_file] | 所有衝突標記在該文件 |
[your_file].working | 當前工作副本 |
[your_file].merge-left.[version] | 產生衝突前基礎版本 |
[your_file].merge-right.[version] | 倉庫裏的最新版本 |
用以下命令解決衝突
$ svn resolve --accept [base | working | mine-conflict | theirs-conflict | mine-full | theirs-full] [conflicting file]
參數 | 說明 |
---|---|
base | 將[your_file].merge-left.[version]做爲最終結果 |
working | 把[your_file]解決衝突後的結果做爲最終結果 |
mine-conflict | 將[your_file].working做爲最終結果 |
theirs-conflict | 將[your_file].merge-right.[version]做爲最終結果 |
mine-full | 將所有[your_file].working做爲最終結果 |
theirs-full | 將所有[your_file].merge-right.[version]做爲最終結果 |
解決衝突後,文件狀態變爲M,這時再向倉庫提交代碼即可。
合併分支
feature分支通過測試後就可以合併到trunk分支。首先切換到trunk分支,然後執行以下命令
$ svn merge [your_feature_branch_url]
merge還具有回滾的功能:
svn merge -r old:new .
。注意不要少最後一個點,這表示把new版本會滾到old版本
順利的話,feature分支就合併到trunk分支了,但是如果有別人和你修改了同一段代碼並且提交到trunk分支就可能再次出現衝突。同樣先解決衝突再提交。
刪除分支
完成功能開發,合併到trunk後,刪除feature分支
$ svn delete [your_feature_branch_url] -m [your_log]
結束
以上就是開發過程中常用的SVN命令,當然SVN的命令是非常豐富的,想要更強大的功能可以通過svn help
來進一步學習。