- SubTrain - Open Source Trainings for Subversion: 教導如何使用 SVN
- Version Control with Subversion(中文版電子書)
- Version Control with Subversion PDF - 作者: 邱茂森(Google 找到的, 相當實用的介紹 和 說明)
- svn命令
- 版本控制系統:svn(subversion)
- Version Control with Subversion
- SVN命令(linux下)
- 研究生必備SVN版本控管
- 在Linux上裝SVN + Backup Script
- Linux(Ubuntu)下Apache + Svn的安装初步完成
底下將svn分為兩個部份:
1.新增架設與管理
2.開發者上傳與使用
1.新增架設與管理指令
=============================
0.安裝架設SVN in Ubuntu:sudo apt-get install subversion
- 先建一個 svn 目錄,用來管理所有的 project
- ~ # mkdir svn ; cd svn;
~/svn #
- ~ # mkdir svn ; cd svn;
- 替 project 獨立地建一個 svn db
- ~/svn # svnadmin create my_project
- 將原先在某處的資料匯入 my_project 的 svn db
- ~/my_project # ls
yoyo_tv - ~/my_project # svn import yoyo_tv file:///.../svn/my_project/trunk
接著打打資訊提醒自己
- ~/my_project # ls
- 對 my_project 的 svn db 撈資料出來
- ~/tmp # mkdir p1 ; svn co file:///.../svn/my_project/trunk p1 ;
- 對查看 my_project 的紀錄
- ~/tmp # cd p1;
~/tmp/p1 # svn log
- ~/tmp # cd p1;
- 透過 svn 將遠處 mirror 的地方更新
- ~/mirror/p1 # svn up
- 將修改好的程式進行紀錄
- ~/tmp/p1 # svn commit;
- 新增對某個新增的檔案或目錄加至 svn db 中
- ~/tmp/p1 # touch haha.c ; svn add haha.c
- 查看目前所在目錄狀況,可得知是否有遺漏管理的
- ~/tmp/p1 # svn status
SVN 檔案狀態資訊:
- ?: 此檔案不存在 SVN 裡面
- A: 此次新增的檔案
- C: 此檔案已經有人改過, 合併不成功, 需要人工介入
- D: 此次移除的檔案
- M: 此檔案有修改過
- U: 此檔案有被更新過
- G: 跟SVN上的檔案不同,但合併成功。
- 僅列出有更動的檔案並略過未加入 svn db 的檔案
- ~/tmp/p1 # svn status | grep -v "?"
鎖定(這樣別人就沒辦法改了) / 解除工作複本路徑或 URL 的鎖定:
svn lock path/file / svn unlock path/file
2.開發者上傳與使用 常用svn指令
上傳資料
- trunk: Main line of development(主幹, 主要開發都由在 trunk)
- tags: Releases (想要 Release 的時後, 就標個 Tag, 以後可以依 Tag 來找回之前版本的資料)
- branches: Preparation of release, bug fixing(分支, 可以將某些功能切出來, 或者 bug fix 等切成分支, 等做完後再用 Merge 合併回來)
建立一個 branch - 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'
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'
建立 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
- svn resolved filename # 這樣子下就會把自動產生 diff 等的檔案刪除
Propset (propset, pset, ps): 版本控制都有些特殊 Keyword 設定, 如 Id 就是最常用的, 設定方法如下:
- 在檔案內找地方加入 $Id$
- 設定此檔案要能吃 Id 的 Keyword: svn ps svn:keywords 'Id' filename (只需設一次即可, 之後就不用再設)
- svn ci 後, $Id$ 會自動代換成
$Id:filename 編號 年月日時分秒 username $
的資訊 - svn help ps 可以看到有哪些 Keyword 可以用, 即 Keyword 的說明.(ex: URL, Author, Date, Rev, Id 等.)
Add: 將此 檔案/目錄 新增進 svn
- SVN_CHECKOUT_DIR$ svn add filename 或 svn add directory
- SVN_CHECKOUT_DIR$ svn mv filename new_filename
- svn mv old_file new_file
Revert: 還原這次的修改, 回到前一版的檔案狀態(未 commit 前可用)
svn revert file/ folder
svn revert *
svn revert *
[svn import - 將 project_directory 的資料 import 進 svn 裡面]
- svn import project_directory http://DOMAIN/svn_project
- svn import project_directory file:///SVN_PATH/svn_project
[SVN提交文件並準備寫入到遠端svn server - svn commit ]
commit (ci) : 將目前有修改的 commit 到 SVN
svn ci (全部有修改的都會commit)
svn ci file1 file2 file3 (只將file1 2 3 commit)
進入需要更新的目錄,輸入命令:svn commit -m path-to-commit,其中path-to-commit可以為空,成功後會提示更新後的版本號。
上傳前記得先觀看本svn資料夾有變動的檔案列表
這個動作通常都是在commit之前在做的------------------------------------------------------------------------------------------------------------
[svn status - 可簡寫為svn st]
svn status path //查看文件或者目錄狀態(包含子目錄),只列出與server有差異的部分
svn status -v path //顯示文件和子目錄狀態(包含與server沒有差異的部分也全部列出來)
svn ci (全部有修改的都會commit)
svn ci file1 file2 file3 (只將file1 2 3 commit)
進入需要更新的目錄,輸入命令:svn commit -m path-to-commit,其中path-to-commit可以為空,成功後會提示更新後的版本號。
上傳前記得先觀看本svn資料夾有變動的檔案列表
這個動作通常都是在commit之前在做的------------------------------------------------------------------------------------------------------------
[svn status - 可簡寫為svn st]
svn status path //查看文件或者目錄狀態(包含子目錄),只列出與server有差異的部分
svn status -v path //顯示文件和子目錄狀態(包含與server沒有差異的部分也全部列出來)
首先從 Trunk 上把目前的 Project 複制一份到 Branches ( ex: 091023-login )
svn cp svn+ssh://chingwei@trac.net/home/svn/trunk/projectsvn+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
------------------------------------------------------------------------
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端有哪些檔案/資料] (list 可簡寫成 ls)
- svn ls http://SVN_PATH/svn_project
- svn ls file:///SVN_PATH/svn_project
[觀看svn的資訊]: 列出現在路徑, 版本編號, 最後一次修改日期 ... 等資訊
svn info
------------------------------------------------------------------------------------------------------------
[ 將SVN上的資料export出來,不包含.svn - (svn export)]
svn export svn+ssh://trac.net/home/svn/repos/branches/life
------------------------------------------------------------------------------------------------------------
[看svn的log檔]
svn log :如果沒輸入參數, 預設會把所有 commit log 都列出來
[進階svnlog使用]
svn log path 或 切換到該path 再輸入 svn log
svn log [PATH]
svn log URL [PATH...]
svn log URL[@REV] [PATH...]
svn log -l 10 # 顯示 10 筆(最新 10筆 Log)
svn log -c 100 # 顯示 revision 100 的 Log
svn log -v -c 100 # 顯示 revision 100 的詳細 Log
------------------------------------------------------------------------------------------------------------
下載資料
[更新svn - svn up](update) 下載前必須先更新
切換到要更新的目錄$ svn up
更新的進階用法 - 還原
svn up -r200 123.txt
------------------------------------------------------------------------------------------------------------
下載 / 下載指定版本
1.svn co(checkout) svn+ssh://ip+path
- svn co http://SVN_PATH/svn_project
- example:svn co -r 版本號 svn+ssh://ip+path /本地存放位置
[比對兩個版本的code - svn diff]
svn diff # 自動以現在檔案跟 SVN 內最新版做 diff
svn diff file //比對檔案
svn diff folder //比對資料夾
svn diff -r 版本1:版本2
example:svn diff -r 1:2 (也可以反過來 2:1 )
------------------------------------------------------------------------------------------------------------
为Eclipse配置Ubuntu SVN。
http://subclipse.tigris.org/files/documents/906/38385/site-1.2.3.zip,可以从这个地址下载Eclipse的插件,拷贝到plugins目录中以后,重启Eclipse就可以打开Ubuntu SVN的视图了。也可以通过官方的 安装页面来进行在线安装:http://subclipse.tigris.org/install.html
===================================
Meld diff
說到比對code有個ubuntu的工具也很推薦,在Ubuntu軟體中心輸入:Meld diff
這軟體長的簡單 但功能強大
安裝好之後 輸入meld找到程式執行後 大概看了都知道如何使用
比code是sw必做的事情,所以這軟體也是sw必用 推薦!
沒有留言:
張貼留言