初學svn
從git轉svn真是很不願意,但是沒辦法公司代碼用svn管理的。以下是我個人對SVN的理解,可能不對的地方會有很多,請指正我們一起學習。
SVN簡介
SVN是一個集中式的代碼管理工具,這裏有SVN教程可參考學習。
基礎操作
檢出
相當於git上的克隆遠程代碼到本地
svn checkout https://svn.xxx.com:8443/svn/xxx/xxx/ --username=xxx --password=xxx /Users/xx/Documents/xxx/xxx
svn checkout https://host地址/克隆目錄地址 --username=用戶名 --password=密碼 本地存儲路徑
檢出的時候還可以指定目錄檢出,分級檢出。
提交更改過的代碼到服務器
svn status
svn add new.txt
svn commit –m ‘commit’
更新服務器端的代碼到本地
svn update
學習筆記
工作流程
日常開發過程其實就是這樣的(假設你已經Checkout並且已經工作了幾天):Update(獲得最新的代碼) -->作出自己的修改並調試成功 --> Commit(大家就可以看到你的修改了) 。
典型的工作週期是這樣的:
-
更新工作拷貝
svn update
-
做出修改
svn add svn delete svn copy svn move
-
檢驗修改
svn status svn resolved
-
提交修改
svn commit
關於衝突
如果兩個程序員同時修改了同一個文件呢, SVN 可以合併這兩個程序員的改動,實際上SVN管理源代碼是以行爲單位的,就是說兩個程序員只要不是修改了同一行程序,SVN都會自動合併兩種修改。如果是同一行,SVN 會提示文件 Conflict, 衝突,需要手動確認。
解決衝突後需要用
svn resolved xxx.m
這樣SVN就知道這個文件不是衝突文件了,會將原來的衝突文件刪除保存這個文件。
svn resolved xxx.m
svn commit -m "..."
關於更新版本庫
顧名思義,update 操作是用來更新版本庫的。這個操作將工作副本與版本庫進行同步。由於版本庫是由整個團隊共用的,當其他人提交了他們的改動之後,你的工作副本就會過期。
讓我們假設 Tom 和 Jerry 是一個項目的兩個開發者。他們同時從版本庫中檢出了最新的版本並開始工作。此時,工作副本是與版本庫完全同步的。然後,Jerry 很高效的完成了他的工作並提交了更改到版本庫中。
此時 Tom 的工作副本就過期了。更新操作將會從版本庫中拉取 Jerry 的最新改動並將 Tom 的工作副本進行更新。
關於複查
在 commit 操作之前複查下你的修改是一個很好的習慣。
svn status 查看所有變更的文件列表
svn diff XXX.m 查看某文件的變更記錄
Revert 操作
Revert 操作重置了對工作副本的修改。它可以重置一個或多個文件/目錄。當然它也可以重置整個工作副本。在這種情況下,revert 操作將會銷燬待變更列表並將工作副本恢復到原始狀態。
svn revert xxx.m
svn status時,發現將不該修改的文件修改了,可以通過revert撤回修改
當不小心刪除了某個文件時,可以通過svn revert撤回。
回到過去
svn checkout --version 1792 # xxx
回去之後怎麼切換回來呢?
關於分支
以下是個人關於SVN分支、合作開發的理解
trunk和branches的存在是合理的,甚至還應該有一個tags專門存儲每次的上線版本,trunk是版本主線,branches存放暫存的開發分支。各個開發先在branches創建一個文件夾,作爲自己的分支branch-mx,然後從trunk讓拷貝一份最新的代碼到branch-mx裏,在這裏修改,修改完後將自己的修改合併到trunk上去。
主目錄
|
|-- trunk
|
|-- branches
|
|-- branch-ZhangSan
|
|-- branch-LiSi
- 怎麼創建分支?
直接對兩個目錄進行copy
svn copy -m "Creating a personal branch of ZhangSan" http://svn.example.com/resp/iOS/trunk http://svn.example.com/resp/iOS/branches/branch-zhangsan
創建完分支後,checkout 到自己的分支上開發。
svn checkout http://svn.example.com/resp/iOS/branches/branch-zhangsan
-
怎麼合併分支?
//切到主目錄 cd ../iOS/trunk/ //更新主線 svn update //將自己分支的修改合併到主線 svn merge --reintegrate http://svn.example.com/resp/iOS/branches/branch-zhangsan //查看合併 svn status / svn diff / ... //提交合並 svn commit -m "..."
注意:以下這個步驟是我個人理解,我也不清楚對不對,網友們有說需要將自己的分支刪除,那豈不是每次開發前需要重新創建了,很麻煩。
分支合併到主幹後,再次開發前需要將自己分支上的內容更新到最新,然後再開始開發
//進入主trunk目錄
cd ../iOS/branches/branch-zhangsan/
//將主目錄的文件merge到自己的分支
svn merge --reintegrate http://svn.example.com/resp/iOS/trunk/
切換分支命令
svn switch http://svn.example.com/resp/iOS/branches/branch-zhangsan
查看分支詳情
svn info
推薦閱讀
這個需要從頭到尾看完
SVN菜鳥教程
這看至少前面的幾章需要看完
SVN使用教程