常用svn命令教程

來源:互聯網
上載者:User

 

  常用的svn命令:

  首先你可以通過svn help/h來查看協助資訊。

  開始工作

  檢出(checkout)伺服器資料到本地

  你剛入職一家公司,或新加入某個團隊,立馬參與到一個項目中,那麼就得擷取項目代碼,開始你的項目生涯。這個時候一般你需要檢出項目代碼:

  svn checkout/co [directory] project(本地目錄名,可選) // 檢出版本3 svn checkout/co –revision/r 3 [directory] project(本地目錄名,可選)

  接著你就可以通過svn info來查看版本資訊了。

  匯入(import)項目

  有時候項目尚未建立,你需要將本地的目錄放到SVN版本倉庫中:

  svn import project(本地目錄名) [directory]

  然後可以通過svn list/ls確認已經在版本倉庫中了。

  更新

  每次你開始編碼前,你都最好先更新下本地的工作目錄:

  cd project svn update/up // 更新到版本3 svn update/up –revision/r 3

  這樣你就可以在新的項目代碼基礎上工作了。

  修改

  可能你寫了一個新的模組,增加了一些新的檔案,需要納入項目的版本控制:

  svn add index.html list.html ...

  可能你發現某個模組已經陳舊了,不再使用了:

  svn delete/del/remove/rm hello.html

  可能你發現一個模組的命名不太合理,需要改名:

  svn move/mv main.css common.css

  可能你要建立一個新的較大的模組,需要新增目錄:

  svn mkdir list

  可能你發現要寫的模組代碼似於舊的模組,直接複製整個代碼:

  svn copy/cp users/list.js list/list.js

  檢查

  忙碌的一天過去了,或者一個任務完成了,這個時候一般會將你的工作成果,也就是代碼更新到版本倉庫。

  習慣上會先檢查下修改狀態:

  svn status/stat/st

  看到一些SVN狀態位資訊,確認是修改了哪些檔案,之後一般會自己code review一下代碼的改動,可能有的人會習慣直接用SVN方式來查看:

  svn diff/di folder(本地目錄名,可選,預設目前的目錄) // 查看index.html目前的版本和版本3的差別 svn diff/di –revision/r 3 index.html // 查看index.html版本3和版本4的差別 svn diff/di –revision/r 3:4 index.html

  一般來說這個時候,沒有什麼特殊情況,就直接進入“提交”階段了,然後結束一個工作日或工作周期,但難免會有些特殊情況出現。

  取消修改

  當你code review完後,發現有些改動不滿意,你可能又會取消這些修改:

  svn revert index.html // 復原整個目錄 svn revert . -R/--recursive

  分支操作

  建立分支

  建立一個分支

  svn copy/cp svn://xxx.com/repo/trunk svn://xxx.com/repo/branches/test -m 'make branch test'

  把工作目錄轉到分支

  svn switch/sw svn://xxx.com/repo/branches/test

  當然,也可以再轉到主幹svn switch/sw svn://xxx.com/repo/trunk。

  給分支打標籤

  複製最新的發布分支為標籤:

  svn copy/cp svn://xxx.com/repo/branches/test svn://xxx.com/repo/tags/test_tag

  合并一個分支到主幹

  尋找到分支版本

  cd branches/test(分支目錄) svn log –stop-on-copy

  最後一個r11340就是建立分支時的reversion,也可:

  cd trunk(主幹目錄) svn -q –stop-on-copy svn://xxx.com/repo/branches/test(分支url)

  這條命令會查詢出自建立分支以後分支上的所有修改,最下面的那個版本號碼就是我們要找的版本號碼。

  合并到主幹

  cd trunk(主幹目錄) svn merge -r 11340(分支版本):HEAD svn://xxx.com/repo/branches/test(分支url)

  兩個分支合并

  假設99是從舊主幹引出,100打完tag,表示是新主幹。

  合并最新代碼的意思是:將新主幹與舊主幹比對,並添加到99中。這樣99既有自己的新增的代碼,也同時有最新線上的代碼。

  cd 99_Branch svn merge svn://xxx.com/repo/tags/project_Old_BL svn://xxx.com/repo/tags/project_New_BL svn ci -m 'merge 100 trunk'

  但是後來,其他人又向100提了代碼,所以還需要將100分支(即打了tag後的100,打了tag前的100已是主幹)合并至99中。

  合并辦法:找出100分支,比對與新主幹之間的差別,並添加到99中。這樣99就有最新的全部代碼了。

  cd 99_Branch svn merge svn://xxx.com/repo/tags/project_New_BL svn:/xxx.com/repo/branches/100_Branch svn ci -m 'merge 100 branch'

  發布

  給當前主幹打個標籤,並且這個標籤不再改動了,但是實際上標籤和分支是一個意思,你可以在標籤上繼續做改動,但這不推薦。

  svn copy/cp svn://xxx.com/repo/trunk svn://xxx.com/repo/tags/RB-1.0

  合并主幹到分支

  svn merge -r LastRevisionMergedFromTrunkToBranch:HEAD svn:/xxx.com/repo/branches/99_Branch

  解決衝突

  當發生衝突的時候,會提示如下資訊:

  Conflict discovered in ‘index.html’.

  Select: (p) postpone, (df) diff-full, (e) edit,

  (mc) mine-conflict, (tc) theirs-conflict,

  (s) show all options:

  svn detects that theres a conflict here and require you to take some kind of action.

  如果你輸入s選項,則會列出所有svn解決衝突的選項,如下所示:

  (e) edit - change merged file in an editor #直接進入編輯

  (df) diff-full -show all changes made to merged file #顯示更改至目標檔案的所有變化

  (r) resolved -accept merged version of file

  (dc) display-conflict -show all conflicts(ignoring merged version) #顯示所有衝突

  (mc) mine-conflict -accept my version for all conflicts (same) #衝突以本地為準

  (tc) theirs-conflict -accept their version for all conflicts (same) #衝突以伺服器為準

  (mf) mine-full -accept my version of entire file (even non-conflicts) #完全以本地為準

  (tf) theirs-full -accept their version of entire file (same) #完全以伺服器為準

  (p) postpone -mark the conflict to be resolved later #標記衝突,稍後解決

  (l) launch -launch external tool to resolve conflict

  (s) show all -show this list

  一般我們會選擇p稍後解決衝突,這樣會產生三個檔案:.mine, .rOLDREV, .rNEWREV。比如:

  index.html index.html.mine index.html.r1 index.html.r2

  解決衝突方法大致有一下幾種:

  手工修改index.html檔案,然後將當前index.html作為最後提交的版本

  svn resolve index.html –-accept working

  選擇base版本,即index.html.rOLDREV作為最後提交的版本

  svn resolve index.html –-accept base

  使用index.html.rNEWREV作為最後提交的版本

  svn resolve index.html –-accept theirs-full

  使用index.html.mine作為最後提交的版本

  svn resolve index.html –-accept mine-full // 或者用下面這條命令也可以 // svn resolve index.html –-accept theirs-conflict

  提交代碼

  最後,一切確認沒問題了:code review完畢,自己覺得代碼滿意了;然後也合并完別人的修改並且沒有衝突了。那麼就提交代碼吧:

  svn commit/ci -m 'message'

  匯出代碼

  你想把你的代碼匯出,不包含svn版本資訊,那麼你可以:

  svn export svn://xxx.com/repo/branches/test folder(本地目錄)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.