星期二, 七月 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 回 FBB [回覆]

厄, 照下面步驟試試:
cd /tmp
svn co http://xxx/svn/myproject project # 後面這是 checkout 要放在這個目錄下.
cd project
svn st # 即可.

Comment by Tsung (03/27/2009 16:19)

this is comment icon [回覆]

原來這個要這樣用喔
可是他說我權限不足
還有
不知道為什麼我發送訊息都會變成發兩篇文章

Comment by FBB (03/27/2009 18:09)

this is comment icon 回 FBB [回覆]

jon

權限不足, 代表有人已經建過那個目錄了 (tmp 應該是大家都可以存取的)
再換個目錄名稱即可.

發送訊息會變兩篇文章, 主要是滑鼠可能同時按了兩下. XD

Comment by Tsung (03/27/2009 18:22)

this is comment icon [回覆]

已經找到解決方法了
在前面加sudo就可以過了
謝謝你~

Comment by FBB (03/27/2009 19:10)

this is comment icon 請問前輩一個最近遇到特別的svn import使用方式?? [回覆]

因為最近遇到一個比較不一樣的case,他必須要
包含一些*.o檔,例如:某些chip vendor 的device
driver library.... 最好也一起上傳到 svn server
作管理會比較方便,只是svn import 就是default不
將 *.o 上傳,不知要如何是好????

Comment by JackyTseng (04/06/2009 19:05)

this is comment icon 回 JackyTseng [回覆]

Source code 管理通常是不會丟 compile 完成的東西.
我沒有 import 過 *.o 檔, 您能試試看 svn add *.o 看看嗎?

Comment by Tsung (04/06/2009 19:22)

this is comment icon [回覆]

感謝前輩的快速幫忙,我目前也只能利用 shell script
方式結合 find ./ -iname "*" > file_list.txt;再一一自動化讓他去作 svn add "$a" ,唉~~~~
只是這樣速度好慢,不知原本就400多M的 Source Code看看是否明天上班時可以上傳完畢....

還是要說聲謝謝您 :-)

Comment by JackyTseng (04/06/2009 21:31)

this is comment icon 回 JackyTseng [回覆]

您可以參考此篇: http://plog.longwin.com.tw/programming/2007/11/02/svn_add_all_new_file_script_2007
這邊的方法可能會比較快一點~ :P

Comment by Tsung (04/06/2009 23:21)

this is comment icon SVN 是否有check-in, check-out的time stamp [回覆]

您好:

目前部門正在評估一套版本控制軟體, 想請問一下, SVN是否可記錄check-in, check-out時間, 另外是否有記載每個版本check-in 的username, 可以經由client軟體顯示出來嗎? 謝謝.

Comment by felix (05/20/2009 16:40)

this is comment icon 回 felix [回覆]

check-in 的時間, 和 check-in 的 username, 如果有 trac, 都可以顯示出來(windows client 我不熟).
check-out 的時間, 目前知道的是不行, 不過如果 svn 走 http, 或許是可以從 access.log 來撈.

Comment by Tsung (05/20/2009 21:31)

this is comment icon 如何將檔案從XP包進Ubuntu裡 [回覆]

您好:

過了一陣子又來請教您問題了!一直有個疑問是,在XP上的程式碼或者是資料夾要如何丟進ubuntu裡面?之前是灌了TortoiseSVN,但是我想應該不用這麼麻煩才對。難道要透過VirtualBox的共享資料夾來傳送檔案嗎?

Comment by FBB (06/22/2009 12:00)

this is comment icon 回 FBB [回覆]

jon

厄, 我不懂您要做的事耶, svn commit ?
如果是的話, XP 是都灌 TortoiseSVN 這套軟體來 commit.
其它軟體我也不熟耶. 而且, 我沒在用 XP.. Orz..

Comment by Tsung (06/22/2009 12:11)

this is comment icon [回覆]

假設我的程式碼在XP上,我想用Ubuntu的Subversion來做版本控制,我要如何將檔案從XP移動到Ubuntu裡面?之前的做法是在XP上用TortoiseSVN,設一個資料夾,選擇create repository here,之後在將XP上的程式碼丟進這個資料夾做check-in check-out的動作,資料夾的名稱位址要跟Ubuntu的一樣,這樣Ubuntu就可以看到XP上的檔案並做控制了。我想問的是有沒有其他方法,這樣似乎有點繁複,還有要如何將一整個資料夾的程式碼放到Ubuntu去呢?

Comment by FBB (06/22/2009 13:44)

this is comment icon 回 FBB [回覆]

厄, 直接在 local 建立一個資料夾, 把檔案都放進去.
再來 svn add directory 就會順便把裡面的檔案都丟進去了.
或者用 import 的方式(第一次)
這不會複雜阿.. 還是你覺得要怎麼做??.. @.@a..

Comment by Tsung (06/22/2009 13:50)

this is comment icon authz svnserve.conf 設定 [回覆]

您好
上次的問題已經解決了^^
這次又有問題想請教一下,我用的是svn://沒有搭配SSH
網上很少有關只有svn://這部分的權限設定文章
結果就自己先照著其他協定的方式設定一次,發現跟version control with subversion所說的不同,他無法在svn://ip/後面輸入詳盡的path,例如:svn://ip/repo/project 會出現URL 'svn://ip/repo/project' doesn't exist所以才想說是不是有地方沒設定好?
還是說只有svn://這個協定是只能輸入svn://ip/?

Comment by FBB (07/27/2009 12:04)

this is comment icon 回 FBB [回覆]

厄, svn:// 我沒有研究耶~
找不到哪邊要用 svn:// 所以都沒有研究~ Orz..

Comment by Tsung (07/27/2009 13:00)

this is comment icon [回覆]

那還是謝謝了QQ

Comment by FBB (07/27/2009 13:14)

this is comment icon 無法執行 svn copy [回覆]

你好,請教分支branch/tag問題: 嘗試多種方式無法成功,且 browser 工作正常.

#svn copy http://localhost/svn/evalbd http://localhost/svn/NetApp/branch/evalbd_branch
svn: Server sent unexpected return value (403 Forbidden) in response to OPTIONS request for 'http://localhost/svn'
#svn copy file:///home/svn/evalbd file:///home/svn/NetApp/branch/evalbd_branch
svn: 無法開啟 URL 的 ra_local session
svn: 無法開啟檔案庫 'file:///home/svn'

WorkSpace:
==================
/home/allen/evalbd

svn:
==================
/home/svn/evalbd
/home/svn/NetApp/branch/evalbd_branch

subversion.conf:
=====================

DAV svn
SVNParentPath /homesvn

Comment by ajuang (08/17/2009 18:51)

this is comment icon 回 ajuang [回覆]

您是丟到不同的 svn repository?
應該要另外 import, 而不是 copy?

Comment by Tsung (08/17/2009 20:24)

this is comment icon 無法執行 svn copy [回覆]

抱歉我不了解你的意思!
我要copy的來源和目的都在 /home/svn 之下, 為何說是不同 repository?
還是我弄錯了呢?

Comment by ajuang (08/17/2009 23:30)
Add this page to del.icio.us

發表迴響

標題

內容 (限制 1000 字)

暱稱

電子郵件

個人網頁


 authimage


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