close

SVN 是一個用來做版本控制的好東西~

我本來覺的這種東西真的好麻煩,改完就要commit,conflict 又要處理~

簡直就是增加我工作的時間嘛。

不過用了一陣子後,就漸漸習慣了~而且還會把你修改的記錄保留,

真的是個不錯的東西耶。

先說明 Trunk、Tags、Branches 的差別

  • Trunk : 主要開發
  • Tags : 當要 Release 時,就標個Tag。
  • Branches : 當要加新功能,或是Bug fix時,將 Trunk 複制一份到 Branches 再繼續開發,之後再 Merge 回Trunk

接著說明 SVN 的指令

  1. checkout (co) : 將SVN上的資料checkout出來
    svn checkout svn+ssh://trac.net/home/svn/repos/branches/life
  2. update (up) : 更新為SVN上的最新版本
    svn up
  3. commit (ci) : 將目前有修改的 commit 到 SVN
    svn ci (全部有修改的都會commit)
    svn ci file1 file2 file3 (只將file1 2 3 commit)
  4. add : 將檔案或目錄加進 SVN ,之後還要再 commit 才會真的加進 SVN
    svn add file
    svn add folder
  5. mv : 改檔名,但之前的紀錄還是會繼續保留
    svn mv old_file new_file
  6. status (st) : 從上次up後,目前檔案的狀態,那些有更改。
    svn st
  7. revert : 還原成前一個版本的狀態
    svn revert file
    svn revert folder
    svn revert *
  8. info : 顯示 SVN 的資訊
    svn info
  9. resolved : 如果檔案有conflict,處理完後,要resolved,才可以ci
    svn resolved file
  10. diff : 將現在的檔案跟SVN做比較
    svn diff (比對全部)
    svn diff file
    svn diff folder
    svn diff -r 100:101 也可以 101:100
  11. export  : 將SVN上的資料export出來,不包含.svn
    svn export svn+ssh://trac.net/home/svn/repos/branches/life
  12. copy (cp) : 首先是建立一個Branch的方式。
    EX:用 trunk/life 建一份branch 到 branches/life
    svn cp svn+ssh://trac.net/svn/trunk/life svn+ssh://trac.net/svn/branches/life -m 'create branch'
  13. import : 將整個資料匣,加到SVN中。
    EX:將life資料匣,import到SVN的trunk/life
    svn import life svn+ssh://chingwei@trac.net/svn/trunk/life
  14. log : 如果沒輸入參數, 預設會把所有 commit log 都列出來
    svn log
    svn log -l 10 # 顯示 10 筆(最新 10筆 Log)
    svn log -c 100 # 顯示 revision 100 的 Logsvn log -v -c 100 # 顯示  revision 100 的詳細 Log
  15. lock : 鎖定,這樣別人就沒辦法改了
    svn lock file
  16. unlock : 解除鎖定
    svn unlock file

SVN 狀態

  • ? - 是新的檔案,不在SVN裡
  • A - 新增的檔案
  • C - 檔案跟SVN的不同,合併失敗,要手動處理
  • D - 移除的檔案
  • M - 有修改過
  • U - 有更新
  • G - 跟SVN上的檔案不同,但合併成功。

目前大概用到這樣~~

 

現在要再說明的是怎麼從 Trunk 建一個 Branch,

然後開發完後,再從 Branch Merge 回 Trunk。

所以其實也不算是進階,只是之前都說基本了~所以第二篇只好叫進階。

 


首先從 Trunk 上把目前的 Project 複制一份到 Branches ( ex: 091023-login )

svn cp svn+ssh://chingwei@trac.net/home/svn/trunk/project svn+ssh://chingwei@trac.net/home/svn/branches/091023-login -m '新版登入功能'

這樣子就建好 Branch 了。然後就 check out 出來開始撰寫新的功能。

svn co svn+ssh://chingwei@trac.net/home/svn/branches/091023-login

以上,從 Trunk 複制一份到 Branch 就完成了。

 


接著就是當程式開發完,要 Merge 回原來的 Trunk 時,要執行的步驟了。

首先看一下建 Branch 時的版本是多少。

svn log --stop-on-copy svn+ssh://chingwei@trac.net/home/svn/branches/091023-login

------------------------------------------------------------------------
r6953 | chingwei | 2009-10-21 14:40:12 +0800 (Wed, 21 Oct 2009) | 1 line
------------------------------------------------------------------------
r6951 | chingwei | 2009-10-21 14:39:19 +0800 (Wed, 21 Oct 2009) | 1 line
------------------------------------------------------------------------
r6950 | chingwei | 2009-10-21 14:38:49 +0800 (Wed, 21 Oct 2009) | 1 line
------------------------------------------------------------------------

結果看到最開始的是 r6950

 

接著將目前的工作目錄切換成 Trunk :

svn switch svn+ssh://chingwei@trac.net/home/svn/trunk/project

 

然後將 Branch 的起始版本號開始,將程式 Merge 到目前的工作目錄 ( Trunk )。

svn merge --dry-run -r 6950:HEAD svn+ssh://chingwei@trac.net/home/svn/branches/091023-login

--dry-run 表示乾跑,就是假的,他會顯示有那些檔將被 update 或是有 conflict 之類的。

 

當確定這些都沒問題,就正式 Merge 把 --dry-run 拿掉:

svn merge -r 6950:HEAD svn+ssh://chingwei@trac.net/home/svn/branches/091023-login

 

Merge 完後,就可以把現在的程式,再 ci 上去 SVN。

svn ci

SVN 基本指令教學

https://blog.longwin.com.tw/2007/07/svn_tutorial_2007/

Subversion commit 取用 svn-commit.tmp

https://blog.longwin.com.tw/2007/08/svn_use_commit_tmp_file_2007/

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 cj6m3 的頭像
    cj6m3

    勇ㄅㄟㄅㄟ胡言亂語堂

    cj6m3 發表在 痞客邦 留言(0) 人氣()