版本控制系統用於保存編寫開發應用程序時的文檔的各個修訂版(revision)。php
版本控制也稱做Revision Control System(RCS)。linux
名詞解釋:數據庫
對團隊和我的都有好處:apache
VSS:Visual Source Save,微軟公司的版本控制器軟件,http://msdn2.microsoft.com/zh-cn/vstudio/aa718670.aspxwindows
CVS:Concurrent Versions System,開源免費,http://www.nongnu.org/cvs/服務器
Subversion,開源免費,http://subversion.tigris.org/網絡
ClearCase,IBM公司,http://www-306.ibm.com/software/awdtools/clearcase/併發
Subversion是新一代的版本控制工具,正逐步替代CVS。dom
資源:eclipse
subversion中文站:http://www.subversion.org.cn/
subversion與cvs的對比:http://www.uml.org.cn/pzgl/200705251.asp
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
如下是搭建簡易的服務器端環境的作法,正式通常配合apache經過http訪問。
建立服務器端版本庫,至關於DBMS建立數據庫示例。
命令行:
svnadmin create file_path/repo_name
svnserve.exe -d -r file_path
訪問該版本庫的url:svn//localhost/repo_name
經過命令行導入:
svn import -m "init import" http://10.0.0.6/svn/teaching/
該命令可將當前路徑下文件導入到版本庫中。
經過命令行檢入:
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服務器的最新修訂版下載到本地成爲本地工做拷貝。
命令行:
svn update
或者
svn up
或者經過tortoiseSVN
或者經過eclipse插件,subclipse(http://subclipse.tigris.org/),在線安裝:http://subclipse.tigris.org/update_1.2.x/
用svn服務器的最新修訂版更新本地工做拷貝。
多人合做時:
命令行:
svn add file_path
或者經過tortoiseSVN,eclipse插件。
告知svn服務器,添加目錄和/或文件到服務器上,這個操做相似SQL的insert,可是並無真的操做,直到commit。
至關於通用概念:檢入(checkin)。
命令行:
svn commit
或者:
svn ci
或者經過tortoiseSVN,eclipse插件。
提交本地工做拷貝的全部改動,並且是原子性的。
要求:通常要註明修改的緣由
svn ci -m "修改bug #224"
要求:提交以前要作更新
svn up svn ci -m "修改bug #224"
對應提交(commit),要有相似回滾(rollback)的操做。
svn revert
或者經過tortoiseSVN,eclipse插件。
這個操做對開發人員十分有用,在改動被人不少代碼後能夠「一鍵恢復」。
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插件。
這個還原是所謂的,不是用舊的版本號替代,而是將舊文件覆蓋新文件。
命令行:
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,是廉價的拷貝。
命令行:
svn move file_name new_file_name
或者:
svn mv file_name new_file_name
svn默認不對文件加鎖。
若是不一樣人編輯了同一個文件的不一樣部分,提交時會自動合併。
若是不一樣人編輯了同一個文件的同一部分,後提交者會報告合併衝突。
解決方法(人工仲裁):
svn resolved file_name
將本地工做拷貝刪除。
命令行:
svn delete file_path
或者:
svn del file_path
通常用於二進制內容,由於沒法合併。
若是某個文件加鎖,其餘用戶的本地工做拷貝(更新後)將是隻讀的。
當該用戶提交後,其餘用戶的本地工做拷貝(更新後)才能夠寫操做。
其餘用戶能夠「撬鎖」,而後進行寫操做。
高級配置能夠配置「撬鎖」權限,使不是什麼人均可以「撬鎖」。
單一的版本庫保存一個項目。
單一的版本庫保存多個項目。
多個版本庫。
在svn中標籤和分支都源於copy命令。
3個約定俗成的目錄:
發佈分支:
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
提交。
原文連接:http://www.iteye.com/topic/28013
一直以來用svn只是看成cvs,也歷來沒有仔細看過文檔,直到今天用到,纔去翻看svn book文檔,慚愧
需求一:
有一個客戶想對產品作定製,可是咱們並不想修改原有的svn中trunk的代碼。
方法:
用svn創建一個新的branches,從這個branche作爲一個新的起點來開發
Tip:
若是你的svn中之前沒有branches這個的目錄,只有trunk這個,你能夠用
新建個目錄
需求二:
產品開發已經基本完成,而且經過很嚴格的測試,這時候咱們就想發佈給客戶使用,發佈咱們的1.0版本
咦,這個和branches有什麼區別,好像啥區別也沒有?
是的,branches和tags是同樣的,都是目錄,只是咱們不會對這個release-1.0的tag作修改了,再也不提交了,若是提交那麼就是branches
需求三:
有一天,忽然在trunk下的core中發現一個致命的bug,那麼全部的branches必定也同樣了,該怎麼辦?
其中148和149是兩次修改的版本號。
其餘的呢?看文檔
原文地址:http://blog.chinaunix.net/space.php?uid=22976768&do=blog&id=1640924
完