SVN簡明課程

來源:互聯網
上載者:User

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. 常見的版本控制系統

  • VSS:Visual Source Save,微軟公司的版本控制器軟體,

    http://msdn2.microsoft.com/zh-cn/vstudio/aa718670.aspx

  • CVS:Concurrent Versions System,開源免費,

    http://www.nongnu.org/cvs/

  • Subversion,開源免費,

    http://subversion.tigris.org/

  • ClearCase


    ,IBM公司,

    http://www-306.ibm.com/software/awdtools/clearcase/

2. Subversion介紹

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

  • 官方網址:

    http://subversion.tigris.org/

  • subversion中文站:

    http://www.subversion.org.cn/

  • 中文手冊:

    http://www.subversion.org.cn/svnbook/

  • subversion與cvs的對比:

    http://www.uml.org.cn/pzgl/200705251.asp

3. Subversion基本使用
3.1. Subversion安裝


Subversion是典型的C/S模式應用程式。
Windows環境下的安裝包:

http://subversion.tigris.org/files/documents/15/41687/svn-1.4.6-setup.exe



安裝過程很簡單,圖形介面,預設選擇即可。
輸入svn命令查看安裝是否成功:
svn --version
svn命令是subversion程式的用戶端
svnserver命令可以啟動svn伺服器,用於搭建簡易的svn伺服器環境
見:

http://www.easymorse.com/bbs/viewthread.php?tid=95&extra=page%3D1



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
或者通過eclipse外掛程式,subclipse(

http://subclipse.tigris.org/update_1.2.x/


線上安裝:
用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個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.