一、SVN概述
1.SVN介紹
SVN是Subversion的簡(jiǎn)稱,是一個(gè)自由開源的版本控制系統(tǒng)。
Subversion將文件存放在中心版本庫(kù)里,這個(gè)版本庫(kù)很像一個(gè)普通的文件服務(wù)器,不同的是,它可以記錄每一次文件和目錄的修改情況,這樣就可以借此將數(shù)據(jù)恢復(fù)到以前的版本,并可以查看數(shù)據(jù)的更改細(xì)節(jié)
2.SVN基本概念
問題:怎樣讓系統(tǒng)允許用戶共享信息,而不會(huì)讓他們因意外而互相干擾?
復(fù)制-修改-合并方案(Subversion默認(rèn)的模式)
在這種模型里,每一個(gè)客戶讀取項(xiàng)目配置庫(kù)建立一個(gè)私有工作副本——版本庫(kù)中文件和目錄的本地映射。
用戶并行工作,修改各自的工作副本,最終,各個(gè)私有的復(fù)制合并在一起,成為最終的版本,這種系統(tǒng)通常可以輔助合并操作,但是最終要靠人工去確定正誤。
3.SVN架構(gòu)
Subversion支持Linux和Windows,更多是安裝在Linux下。
源代碼版的解壓就能用
二進(jìn)制文件版解壓后要安裝
?svn服務(wù)器有2種運(yùn)行方式:
一.獨(dú)立服務(wù)器版本(源代碼版的解壓就能用)
二.借助apache運(yùn)行版本(二進(jìn)制文件版解壓后要安裝,安裝文件,根據(jù)不同的系統(tǒng)選擇)。?????????????
兩種方式各有利弊?
?svn存儲(chǔ)版本數(shù)據(jù)也有2種方式:
BDB(一種事務(wù)安全型表類型)和FSFS(一種不需要數(shù)據(jù)庫(kù)的存儲(chǔ)系統(tǒng))。因?yàn)锽DB方式在服務(wù)器中斷時(shí),有可能鎖住數(shù)據(jù),所以還是FSFS方式更安全一點(diǎn)(基于文件系統(tǒng))。
二..使用篇(重點(diǎn))
SVN?:是一種集中式管理代碼的版本控制系統(tǒng),原理就是把代碼都保存到一個(gè)固定的位置(倉(cāng)庫(kù)),每次從這個(gè)位置拷貝更新代碼,進(jìn)行編輯;再把修改后的代碼提交到該目錄中。
SVN是基于客戶端和服務(wù)端(實(shí)際開發(fā)更多安裝是在linux下)的方案::
多人協(xié)作開發(fā)也是如此。因此需要一個(gè)服務(wù)器用于保存和管理庫(kù)文件(要保存的代碼等文件)的服務(wù)端——VisualSVN Server。實(shí)際開發(fā)服務(wù)端更多是安裝在Linux下。
還需要一個(gè)用戶的操作端,用于提交更新檢出代碼,
常用的有Eclipse的Svn插件,以及TortoiseSVN(小烏龜)。? ? ? ? ? ? ? ? ?
?SubVersion官網(wǎng):http://subversion.apache.org/
一.服務(wù)器端-VisualSVN安裝與配置
1,VisualSVN安裝與創(chuàng)建倉(cāng)庫(kù)
在開始運(yùn)行中錄入services.msc
這個(gè)服務(wù)要開啟
在開始運(yùn)行中查找visualSVN Server Manager就可以打開圖形化管理界面
二,VisualSVN創(chuàng)建工程目錄??
可以創(chuàng)建很多的倉(cāng)庫(kù),實(shí)際開發(fā)中一個(gè)倉(cāng)庫(kù)對(duì)應(yīng)著一個(gè)項(xiàng)目
可以在repository右擊選中properties(特性),給用戶授權(quán).
三..VisualSVN權(quán)限控制
創(chuàng)建用戶和用戶組
創(chuàng)建組
創(chuàng)建一個(gè)組,將開發(fā)人員分組,可以批量的為成員授權(quán).
分配權(quán)限
可以在repositories右擊選中properties(特性),給用戶授權(quán)
在給用戶修改權(quán)限的時(shí)候,先移出,在添加
二.客戶端-TortoiseSVN安裝與使用(重要)
它是一個(gè)基于windows系統(tǒng)的svn圖形化界面.
1.TortoiseSVN下載
2.TortoiseSVN安裝
安裝后需要重啟電腦.
3.Tortoise SVN常用操作
瀏覽倉(cāng)庫(kù)
正常情況下,在瀏覽倉(cāng)庫(kù)時(shí)會(huì)要求錄入username與password
我們可以清空svn客戶端的緩存
Checkout
檢出svn服務(wù)器上的項(xiàng)目
注意:檢出后會(huì)有一個(gè).svn隱藏目錄
Add:添加到svn服務(wù)器管理 ????
在檢出(checkout)的項(xiàng)目文件夾里面創(chuàng)建文件
這樣圖標(biāo)的文件代表它沒有由svn管理
Add只是加到了SVN管理 ?,這個(gè)代表的是它要添加到svn服務(wù)器
Commit:提交到了倉(cāng)庫(kù)中
Update
Update,它是更新操作,可以將svn服務(wù)器上的內(nèi)容更新到本地
更新到歷史版本
在實(shí)際的開發(fā)中,一般開發(fā)人員在寫完代碼的時(shí)候,自己測(cè)試可以通過,還要項(xiàng)目經(jīng)理審核才能commet,
更新到歷史版本一般是很少使用的
查看當(dāng)前日志
通過日志信息,右擊哪一個(gè)版本
也可以通過下面的方式來更新歷史版本
Delete(標(biāo)記刪除) ?用的不多
標(biāo)記刪除操作,本地文件會(huì)刪除,我們需要在它的父目錄(項(xiàng)目的倉(cāng)庫(kù))進(jìn)行提交,才能真正從服務(wù)器刪除
在重構(gòu)的時(shí)候,刪除一些無用的類和文件,會(huì)用到
導(dǎo)入導(dǎo)出(了解)
Import將本地資源導(dǎo)入到svn服務(wù)器
Export導(dǎo)出項(xiàng)目,和checkout的區(qū)別,它不存在.svn隱藏文件
三..客戶端-Eclipse SVN插件安裝與使用(次重要)
1.下載與安裝SVN插件
在我們資料中有一個(gè)svn插件,交它直接復(fù)制到eclipse安裝目錄下的dropins中
我們?cè)鯓涌梢灾纒vn插件安裝成功
2.Eclipse SVN插件使用
瀏覽倉(cāng)庫(kù),將eclipse工程導(dǎo)入到svn服務(wù)器
在svn資源庫(kù)研究
怎樣將eclipse中的工程導(dǎo)入到svn倉(cāng)庫(kù),可以在工程上右鍵
完成后,它其實(shí)沒有真正的導(dǎo)入,需要我們?cè)谶M(jìn)行提交才真正導(dǎo)入到svn倉(cāng)庫(kù)
Checkout? ,? ?導(dǎo)出? ,? ?導(dǎo)入
Add ?commit ?update更新到歷史版本
Eclipse的svn插件解決沖突
產(chǎn)生了沖突
我們?cè)诠こ躺蠄?zhí)行更新操作,就可以查看到?jīng)_突的文件
解決沖突
三 ..沖突問題與解決(重要)
多個(gè)用戶同時(shí)操作同一個(gè)文件時(shí),就可能產(chǎn)生沖突情況。
這個(gè)沖突產(chǎn)生后如何解決,我們可以采用手動(dòng)Merge,解決沖突后,重新commit.
HelloWorld.java它是服務(wù)器上的文件與本地文件合并
HelloWorld.java.mine本地修改后的文件
HelloWorld.java.r4修改前的文件
HelloWorld.java.r5對(duì)方修改后的文件
進(jìn)入后,選中代碼右擊,選擇操作,并且點(diǎn)擊合并后的代碼也能修改 ??,修改完成后save ,標(biāo)記為解決
注意:
在添加后只是在本地,需要提交到服務(wù)端才是真正的導(dǎo)入了svn倉(cāng)庫(kù).
五.擴(kuò)展篇
1.svn目錄規(guī)范
在visualSVN中創(chuàng)建倉(cāng)庫(kù)時(shí),可以選擇svn目錄結(jié)構(gòu)進(jìn)行創(chuàng)建
Trunk主干目錄,此目錄下的文件為基準(zhǔn)文件
Branches用于開發(fā)的分支目錄
Tags用于發(fā)布的版本目錄
假設(shè)有一個(gè)項(xiàng)目OA,我們完成了1.0版本,這時(shí)就可以打一個(gè)tags
后續(xù)我們?cè)贠A項(xiàng)目上添加一個(gè)新的模塊(及時(shí)通訊),我們就可以開一個(gè)分支,又有一個(gè)公司需要在我們OA基礎(chǔ)上添加財(cái)務(wù)管理模塊,我們又可以打一個(gè)分支。我們后續(xù)針對(duì)OA的1.0版本在升級(jí),我們不需要原來附加功能,就可以在原來的主干上繼續(xù)開發(fā),形成OA2.0版本,開發(fā)完成后就可以在打一個(gè)tags
2.打一個(gè)分支或標(biāo)記
分支的定義規(guī)則:
Project name+日期時(shí)間+功能點(diǎn)
Tags的定義規(guī)則
Project name+版本號(hào)
版本號(hào)定義為三段數(shù)字編號(hào)
xxx.xxx.xxx
第一個(gè):革命性的產(chǎn)品升級(jí)版
第二個(gè):新功能版
第三個(gè):修正bug
切換主干,分支與標(biāo)記
Tags一般是只讀,它代表的是發(fā)布的版本,所以我們不要進(jìn)行改變。
[if !supportLists]1.?[endif]主干與分支的合并
如果要將主干內(nèi)容合并到分支上,我們需要在分支的工作副本上操作。
如果要將分支的改變合并到主干上,我們需要在主干的工作副本上操作。
我們的需要是將分支的改變合并到主干上:
注意:在合并時(shí)要選擇在相應(yīng)的版本號(hào),合并后,可能會(huì)出現(xiàn)沖突,將沖突解決,commit就可以。