星期二, 七月 10, 2007

SVN 基本指令教學

SVN 的基本指令介紹, 主要參考自下述:

主要 SubTrain 的 PPT 前面頁數看一看, 基礎就大概都知道了, 後面頁數太進階了, 目前用不到, 以後再看. XD

PS: 如果不知道 SVN 是什麼, 可見此文: 淺談版本控制系統, 裡面連結檔案看完, 應該就很清楚了 :)

先來看 SVN Trunk/Tags/Branches 目錄 的 架構 和 用途:(英文說明轉載自 SubTrain PPT)

  • trunk: Main line of development(主幹, 主要開發都由在 trunk)
  • tags: Releases (想要 Release 的時後, 就標個 Tag, 以後可以依 Tag 來找回之前版本的資料)
  • branches: Preparation of release, bug fixing(分支, 可以將某些功能切出來, 或者 bug fix 等切成分支, 等做完後再用 Merge 合併回來)

SVN 基本功能:

Import: 將整個 project_directory 的資料 import 進 svn 裡面

  • svn import project_directory http://DOMAIN/svn_project
  • svn import project_directory file:///SVN_PATH/svn_project

Checkout: (checkout 可簡寫成 co), 將資料 checkout 回來

  • svn co http://SVN_PATH/svn_project
  • svn co file:///SVN_PATH/svn_project
  • svn co -r 12 file:///var/lib/svn/dev/projects # 出第12版的 projcets code

List: (list 可簡寫成 ls), 看上面有哪些檔案/資料

  • svn ls http://SVN_PATH/svn_project
  • svn ls file:///SVN_PATH/svn_project

Update: (update 可簡寫成 up), 將目前資訊更新成 SVN 線上最新版本.

  • SVN_CHECKOUT_DIR$ svn up
Commit: (commit 可簡寫成 ci), 將目前所做的修改 commit 回 svn
  • SVN_CHECKOUT_DIR$ svn ci
Status: (status 可簡寫成 st), 看目前檔案/結構 跟 SVN 線上的版本有哪些不同
  • SVN_CHECKOUT_DIR$ svn st
Add: 將此 檔案/目錄 新增進 svn
  • SVN_CHECKOUT_DIR$ svn add filename 或 svn add directory
MV: 改檔名, 並且此檔案之前紀錄還要繼續留下
  • SVN_CHECKOUT_DIR$ svn mv filename new_filename
Revert: 還原這次的修改, 回到前一版的檔案狀態(未 commit 前可用)
  • SVN_CHECKOUT_DIR$  svn revert [file | directory]

SVN 檔案狀態資訊:

  • ?: 此檔案不存在 SVN 裡面
  • A: 此次新增的檔案
  • C: 此檔案已經有人改過, 合併不成功, 需要人工介入
  • D: 此次移除的檔案
  • M: 此檔案有修改過
  • U: 此檔案有被更新過

再來是比較進階一點點, 下述範例轉載自 SubTrain 的教學 PPT:

建立一個 branch

  • svn copy http://svnserver/calc/trunk http://svnserver/calc/branches/my-calc-branch -m 'create a branch' 

建立 Release Tags:

  • svn copy http://svnserver/calc/trunk http://svnserver/calc/tags/Release-1.0.0 -m 'create Release tags for Release 1.0.0'

合併兩個版本的檔案 # 參考自: 用 Subversion 的 Merge 來 Undo

  • svn merge -r REV1:REV2 {path/to/workingcopy}
  •  (UNDO) svn merge -r 1234:1233 ...
  •  (MERGE)svn merge -r 1233:1234 ...
  • svn merge --dry-run -r 343:344 http://svn.example.com/repos/calc/trunk
有 "C" 狀態處理完後, 用 resolved  將自動產生的檔案刪除, 才能正常 commit:
  • svn resolved filename # 這樣子下就會把自動產生 diff 等的檔案刪除

找版本間有什麼不同 diff:

  • svn diff # 自動以現在檔案跟 SVN 內最新版做 diff
  • svn diff -r9237:9238
Info: 列出現在路徑, 版本編號, 最後一次修改日期 ... 等資訊
  • svn info

Log: 如果沒輸入參數, 預設會把所有 commit log 都列出來

  • svn log
  • svn log -l 10 # 顯示 10 筆(最新 10筆 Log)
  • svn log -c 100 # 顯示 revision 100 的 Log
  • svn log -v -c 100 # 顯示  revision 100 的詳細 Log

Propset (propset, pset, ps): 版本控制都有些特殊 Keyword 設定, 如 Id 就是最常用的, 設定方法如下:

  1. 在檔案內找地方加入 $Id$
  2. 設定此檔案要能吃 Id 的 Keyword: svn ps svn:keywords 'Id' filename (只需設一次即可, 之後就不用再設)
  3. svn ci 後, $Id$ 會自動代換成 $Id:filename 編號 年月日時分秒 username $ 的資訊
  4. svn help ps 可以看到有哪些 Keyword 可以用, 即 Keyword 的說明.(ex: URL, Author, Date, Rev, Id 等.)

其它 SVN Client:

SVK 相關介紹:

其它相關網頁

相關標籤

this is comment icon 回 little1981 [回覆]

嗯嗯, 可以在目錄下使用 svn st, 就可以看到異動狀況了.
不過, 刪除和修改這些, 我是沒有特別做, 因為 svn ci 就會自動帶到了 :)

Comment by Tsung (05/23/2008 15:59)

this is comment icon [回覆]

那這樣我曉得了
就先執行svn commit 把修改跟刪除的進行處理
之後再執行svn add語法把新增的也處理
再進行svn commit這樣就全包了!!!

雖然用烏龜SVN可以svn commit全包說~
就可以少掉後面的步驟!

多謝你!!

Comment by little1981 (05/23/2008 16:34)

this is comment icon 回 little1981 [回覆]

喔喔, 基本上兩者是一樣的, svn commit 是都一致的.
我記得烏龜的 svn commit, 是出現很多 file, 然後讓你勾選是否要新增.
你在 cli 狀況, 也是可以這樣子做, 先 svn add file 後, 再一起和 修改/刪除的一起 commit 就可以了 :)
加油囉~ :)

Comment by Tsung (05/23/2008 18:22)

this is comment icon 補充 [回覆]

在 post-commit 自動 svn update 將錯誤訊息 log 起來,找出無法自動 post-commit 的原因:

#post-commit 如果沒有這行會無法自動 post-commit
#出處:http://www.php126.com/archives/562.html
export LANG=zh_TW.UTF-8

若系統編碼是 big5 則改成 export LANG=zh_TW.Big5

Comment by timeternity (05/28/2008 16:09)

this is comment icon 回 timeternity [回覆]

感謝提供, 已補上~ Orz.

Comment by Tsung (05/28/2008 16:38)

this is comment icon 有辦法將auto-merge關掉嗎 [回覆]

就是svn up之後
有時候會出現
G filename
說這各檔被auto merge
可是我不想他這樣做
寧願看到
c
有辦法改成這樣嗎?

謝謝~~

Comment by 將果 (07/04/2008 13:54)

this is comment icon 回 將果 [回覆]

厄... 我們大家都只想看到 G, 不想看到 C 耶, 因為看到 G 代表他幫你合併好囉~
不過我猜您是想知道他有修改了哪些東西~
我通常都是直接看這版本和上一版本的 diff 就可以了(用 svn command 或 trac 來看)

Comment by Tsung (07/04/2008 21:13)

this is comment icon 請問這個軟體有自動排程的功能嗎 [回覆]

請問我可以設定每隔幾分鐘或幾小時針對一個在client端的資料夾,可以讓server端自動的update嗎
Comment by money (08/09/2008 16:11)

this is comment icon 回 money [回覆]

這個就要自己寫囉, 不過定時做個 svn up 的動作, 應該蠻簡單的才是~ :)

Comment by Tsung (08/11/2008 10:22)

this is comment icon xml data was not well-formed? [回覆]

不好意思,請問一下 我安裝TortoiseSVN-1.5.3.13783-win32-svn-1.5.2跟svn-1.4.0後 我在c:\建立一個folder:aaa 按右鍵→SVN Checkout 輸入網址,可是顯示 xml data was not well-formed的錯誤訊息 google一下,相關資料很少 是我少了設定什麼嗎? 請多指教,謝謝
Comment by BigShotRob (09/11/2008 22:45)

this is comment icon 回 BigShotRob [回覆]

好像是設定沒設好, 設定檔有錯誤?
還是沒有做 create 的動作??

Comment by Tsung (09/12/2008 18:08)

this is comment icon svn的問題 [回覆]

您好:
原來是我的設定沒設好,謝謝您的提醒呀!^^
希望以後可以再跟您請教問題

Comment by BigShotRob (09/14/2008 20:35)

this is comment icon 回 BigShotRob [回覆]

嗯嗯, 隨時有問題, 就提出來討論囉~ :)

Comment by Tsung (09/15/2008 00:01)

this is comment icon [回覆]

可用svn propset svn:executable "1" [file path] 試試,可參考http://twpug.net/docs/Subversion/#svn-ch-6-sect-2.3.1中的svn:executable

Comment by Homicide (10/30/2008 11:34)

this is comment icon 回 Homicide [回覆]

感謝提供. Orz.

Comment by Tsung (10/30/2008 23:56)

this is comment icon 能取得get的資訊嗎? [回覆]

我如果想看到底有誰曾經get file的話,請問svn有這樣的功能嗎?我不是要check in/out的資訊哦!!
Comment by jerel (02/17/2009 17:13)

this is comment icon 回 jerel [回覆]

厄, 應該沒有耶, 如果要記這麼多東西, svn 的 db 應該會爆炸吧?

Comment by Tsung (02/18/2009 11:56)

this is comment icon working copy [回覆]

您好
看到你的文章讓我了解很多,不過我是第一次碰linux,版本用的是ubuntu,之前用久了windows,所以不是很清楚這個系統的運作方式,在參考了TortoiseSVN的圖形化介面後,比較了解working copy跟repository是不同資料夾,但是在ubuntu下只要輸入指令就會產生出working copy,但是他是生在哪個目錄下,難道不用去指定一個路徑嗎?或者是我要先 cd 到我要的目錄下再做checkout的動作?

Comment by FBB (03/27/2009 12:11)

this is comment icon 回 FBB [回覆]

先 cd 到你要的目錄後, 再做 checkout 的動作.
因為不曉得你的目錄狀況, 如果會很散亂, 建議就先建個目錄再 checkout 囉~ :)

Comment by Tsung (03/27/2009 13:23)

this is comment icon [回覆]

假設我checkout一個working copy,想要cd到該目錄下輸入svn st的指令時,他顯示bash:cd: /home/svn/myproject/branches: No such file or directory所以有點搞不清楚checkout出來的東西跑哪了

Comment by FBB (03/27/2009 13:42)
Add this page to del.icio.us

發表迴響

標題

內容 (限制 1000 字)

暱稱

電子郵件

個人網頁


 authimage


PS: 若無法留言, 請先確認是否有打開 JavaScript, 造成您的困擾, 實在萬分對不起 Orz...(如果無法留言, 勞煩可以發信給我好嗎? 謝謝.)
PS2: 若您的留言被誤判, 我都會再自行看過, 不需要一直重覆張貼~