跳到主要內容

SVN簡明課程

1. 版本控制介紹



1.1. 什麼是版本控制


版本控制系統用於保存編寫開發應用程序時的文檔的各個修訂版(revision)。
版本控制也稱作Revision Control System(RCS)。
名詞解釋:
  • 修訂版(revision):可以認為是某個文件在其生命週期內各個保存的快照,每個快照和一個時間區間對應。
  • 版本庫(Repository):存放修訂版的數據庫
  • 本地工作拷貝(Local working copy):修訂版在本地的副本
  • 版本的檢入(Check in):本地副本提交到服務器的版本庫
  • 檢出(Check out):從服務器的版本庫中取出修訂版成為本地副本
  • 版本號的來源:有兩種策略,基於文件的計數和基於倉庫的計數,subversion使用後者
  • 標籤(Tags):為版本加一個名字,便於檢出
  • 分支(Branches):修訂版打分支,以後可以平行修改,互不干擾
  • 合併(Merging):將分支的修訂版合併為一個新的修訂版
  • 鎖(Locking):為修訂版枷鎖
  • 衝突(Conflict):並發版本控制時防止修訂版混亂的錯誤機制

1.2. 使用版本控制的好處


對團隊和個人都有好處:
  • 為團隊提供了所有項目文檔的回退按鈕;
  • 支持多個開發人員在可控的方式下為相同的代碼工作;
  • 版本控制系統保存了文檔在過去的各個改動,便於查找是誰,在何時,因為什麼修改了文檔;
  • 支持在文檔的主線上同時有多個版本;
  • 支持查詢在某個時點上項目各個文檔的狀態,可用於研究生產效率等,也可用於對以前的軟件發行版的再發行。

1.3. 常見的版本控制系統



2. Subversion介紹


Subversion是新一代的版本控制工具,正逐步替代CVS。
資源:

3. Subversion基本使用



3.1. Subversion安裝


Subversion是典型的C/S模式應用程序。
安裝過程很簡單,圖形界面,默認選擇即可。
輸入svn命令查看安裝是否成功:

svn --version

svn命令是subversion程序的客戶端
svnserver命令可以啟動svn服務器,用於搭建簡易的svn服務器環境

3.2. 服務器端


以下是搭建簡易的服務器端環境的做法,正式一般配合apache通過http訪問。

3.2.1. 創建版本庫


創建服務器端版本庫,相當於DBMS創建數據庫示例。
命令行:

svnadmin create file_path/repo_name


3.2.2. 啟動服務器



svnserve.exe -d  -r file_path

  • -d 後台執行
  • -r 版本庫的根目錄
訪問該版本庫的url:svn//localhost/repo_name

3.3. 客戶端



3.3.1. 初始導入(import)


通過命令行導入:

svn import -m "init import" http://10.0.0.6/svn/teaching/

該命令可將當前路徑下文件導入到版本庫中。

3.3.2. 檢出(checkout)


通過命令行檢入:

svn co http://hibernate3demo.googlecode.com/svn/tags/helloworld_r1

或者:

svn checkout http://hibernate3demo.googlecode.com/svn/tags/helloworld_r1

或者:通過第三方圖形工具的檢出,比如tortoiseSVN(http://tortoisesvn.tigris.org/)
將svn服務器的最新修訂版下載到本地成為本地工作拷貝。

3.3.3. 保持更新(update)


命令行:

svn update

或者

svn up

或者通過tortoiseSVN
用svn服務器的最新修訂版更新本地工作拷貝。
多人合作時:
  • 更新要經常頻繁的做,儘量讓問題及早暴露,便於處理。
  • 提交代碼前要更新,否則容易產生版本衝突。

3.3.4. 添加(add)


命令行:

svn add file_path

或者通過tortoiseSVN,eclipse插件。
告知svn服務器,添加目錄和/或文件到服務器上,這個操作類似SQL的insert,但是並沒有真的操作,直到commit。

3.3.5. 提交改動


相當於通用概念:檢入(checkin)。
命令行:

svn commit

或者:

svn ci

或者通過tortoiseSVN,eclipse插件。
提交本地工作拷貝的所有改動,而且是原子性的。
要求:一般要註明修改的原因

svn ci -m "修改bug #224"

要求:提交之前要做更新

svn up
svn ci -m "修改bug #224"


3.3.6. 還原改動


對應提交(commit),要有類似回滾(rollback)的操作。

svn revert

或者通過tortoiseSVN,eclipse插件。
這個操作對開發人員十分有用,在改動被人很多代碼後可以「一鍵恢復」。

3.3.7. 「還原」已提交的改動


revert只適合未提交的情況。
如果已經提交,發現問題,要回退到之前的修訂版。
首先需要:

svn up

讓本地工作拷貝更新到最新狀態。
然後:

svn log your_file_path

查看文件日誌,這時候提交時填寫的說明信息就派上用場了。
查看兩個修訂版之間的不同:

svn diff -r 舊修訂版序號:新修訂版序號 your_file_path

或者通過tortoiseSVN,eclipse插件。
決定用哪個舊的修訂版號後,用舊的修訂版號文件覆蓋新的修訂版號文件。

svn merge -r 新修訂版序號:舊修訂版序號 your_file_path

還需要:

svn commit -m "恢復到某修訂版(某修訂版作廢)"

或者通過tortoiseSVN,eclipse插件。
這個還原是所謂的,不是用舊的版本號替代,而是將舊文件覆蓋新文件。

3.3.8. 拷貝文件和目錄


命令行:

svn copy path/file_name newpath/new_file_name
svn commit -m "xxxx"

或者:

svn cp path/file_name newpath/new_file_name
svn commit -m "xxxx"

或者:利用windows的資源管理器/unix的cp命令
或者通過tortoiseSVN,eclipse插件。
svn的copy,是很重要的工具,版本分支和標籤等概念都通過它實現。
svn的copy,是廉價的拷貝。

3.3.9. 重命名目錄/文件


命令行:

svn move file_name new_file_name

或者:

svn mv file_name new_file_name


3.3.10. 處理合併衝突


svn默認不對文件加鎖。
如果不同人編輯了同一個文件的不同部分,提交時會自動合併。
如果不同人編輯了同一個文件的同一部分,後提交者會報告合併衝突。
解決方法(人工仲裁):
  • 放棄改動;
  • 堅持你的改動,找到.mine的文件名,恢復為原文件名,然後執行:
    svn resolved file_name
     

3.3.11. 刪除文件


將本地工作拷貝刪除。
命令行:

svn delete file_path

或者:

svn del file_path


4. Subversion高級內容



4.1. 文件鎖


一般用於二進制內容,因為無法合併。
如果某個文件加鎖,其他用戶的本地工作拷貝(更新後)將是只讀的。
當該用戶提交後,其他用戶的本地工作拷貝(更新後)才可以寫操作。
其他用戶可以「撬鎖」,然後進行寫操作。
高級配置可以配置「撬鎖」權限,使不是什麼人都可以「撬鎖」。

4.2. 版本庫創建策略


單一的版本庫保存一個項目。
單一的版本庫保存多個項目。
多個版本庫。

4.3. 使用標籤和分支


在svn中標籤和分支都源於copy命令。
3個約定俗成的目錄:
  • trunk:主幹
  • branches:分支
  • tags:標籤
發佈分支:

svn cp -m "創建用於實現radio標籤的分支" https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_1 https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_2

切換分支:

svn switch https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_2

合併分支需要兩個步驟:
合併操作

svn merge -r 33:HEAD https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_2

或者:

svn merge https://easymorse-simpletag.googlecode.com/svn/trunk/simpletag@HEAD https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_1@HEAD

提交。

5. 未講到的內容


  • svn備份
  • subversion屬性
  • 與apache集成的配置和使用

留言

這個網誌中的熱門文章

[試用心得] 日本無線上網超Wi-Ho(走SoftBank),一日不限流量NT299,可供多人使用,林氏璧讀者九五折優惠。

[試用心得] 日本無線上網超Wi-Ho(走SoftBank),一日不限流量NT299,可供多人使用,林氏璧讀者九五折優惠。 p.s.上面這張圖的吃到飽是錯的,Docomo小白機從去年就有限流量了,但特樂通聲稱Soft Bank小紅機是沒有限流量的。 我 是一個重度網路使用者,因為我有一個部落格需要管理。即使是在旅行的時候,我也很難忍受一天不能上網。去年從美國回來後終於入手了智慧型手機,這才發現這 個世界已經進步成什麼樣了!!一個小小手機就可以上網辦到好多事啊!!我也變成了一個低頭族,喜歡到處打卡,到了一個新地方就想上傳照片和粉絲專頁的朋友 們分享,或是用line或Skype和家人報平安。2012年8月我去東北的那一次是申請中華電信的漫遊,速度感覺不是很快或很穩定(當然也和東北多半比 較郊區有關)。這次回東京,終於試用到了網路上大名鼎鼎的上網神器:Wi-Ho。其實我想用用看WI-HO很久了,因為似乎比常用的B-MOBILE快很 多又不用裝SIM卡,這次終於有機會^^ 感謝日商特樂通資訊台灣分公司提供我們試用!!這次旅行途中一路暢通的網路,讓我體驗到活用各式App,google地圖等來定位,Tabelog找店家 等等的方便功能,真的深深感覺,傳統的玩東京的方式可以被行動上網徹底改變呢! 2013.7.19更新: 特樂通公司將推出兩台新機器,舊的小白機有可能慢慢淘汰,這篇介紹的小紅機還是不錯的選擇,但都有更好的機種了,請看: [新機上市] Wi-Ho黑旋風機(走Docomo適合郊區)及小黑機(走E-mobile適合城市),可使用超過十小時的日本無線上網新選擇,林氏璧讀者九五折優惠。 2013.7.3更新: 1.超WiHo! Softbank 3.5G (JP-S )(小紅機) 日本 $199/天 !! 說明:只有限前往日本及小紅機訊號優良地區,其他地區小紅機訊號不好處,需使用Docomo (JP-DM),仍維持原價$299 比方說我從6月15日借八天Soft bank小紅,不但一天199,整個金額會再打95折歐!快從這個林氏璧的專屬網址 線上申請 吧。(如果沒有打折,請在經銷商的欄位輸入linshibi,應該就會有打折了) 2.7~9月份使用的所有國家(包含日本),請即日起上網預訂,7~9月日本機器尚有充足貨源,...

Effortless English - MP3 Free Download ( 167 )

Effortless English - MP3 Free Download ( 167 ) You can download here free AJ Hoge's podcasts, upload them to your mp3 player and improve your English listening at least 30 minutes everyday. To download mp3 click right button of your mouse and select "Save as". Click here to go to the official Effortless English website! General: Power_English_Update.mp3 Models_Etc.mp3 Audio_Twitter_Tweets.mp3 AJ_Update.mp3 Hitch_1_Commentary.mp3 Hitch_1.mp3 Hitch_1_MS-POV.mp3 Hitch_1_MS.mp3 Hitch_1_Vocab.mp3 English_Mastery_Formula.mp3 New_English_Club.mp3 Learn_English_Naturally.mp3 Back_Home.mp3 The_Best_Investment.mp3 Seminar_In_Bangkok_Jan25.mp3 New_Year_Resolution.mp3 Subconscious_Learning.mp3 Intensely.mp3 Super_Fast.mp3 English_Learning_Psychology.mp3 English_Club_2.mp3 Your_First_Lesson.mp3 Business_English_For_New_Business.mp3 Learn_English_Conversation.mp3 Learn_English_Grammar.mp3 Business_vs_Self-Employment.mp3 Learn_Business_English_Eff...