1. 河豚號(hào) > 生活百科 >

svn命令行操作(公司新人svn使用教程)

一、SVN工作原理

SVN(SubVersion)的基本工作思路是這樣的:在一臺(tái)服務(wù)器上建立一個(gè)源代碼庫(kù),庫(kù)里可以存放許多不同項(xiàng)目的源程序,由源代碼庫(kù)管理員統(tǒng)一管理這些源程序。

每個(gè)用戶在使用源代碼庫(kù)之前,首先要把源代碼庫(kù)里的項(xiàng)目文件下載到本地(Checkout),然后用戶可以在本地任意修改,最后用svn命令進(jìn)行提交(Commit),由svn源代碼庫(kù)統(tǒng)一管理修改。如下圖:

 

基于windows平臺(tái)的SVN教程

 

SVN服務(wù)器:運(yùn)行SubVersion服務(wù)的計(jì)算機(jī),SubVersion支持Linux和Windows,更多的是安裝在Linux下。SVN提供服務(wù)有兩種方式(運(yùn)行方式):獨(dú)立服務(wù)器和借助Apache服務(wù)器,分別使用SVN協(xié)議和Http協(xié)議。

SVN客戶端:用戶通過(guò)SVN客戶端同SVN服務(wù)器打交道,SVN客戶端分為命令行工具和圖形化工具。最流行的客戶端是TortoiseSVN。也可以在Eclipse中使用SVN插件。

 

基于windows平臺(tái)的SVN教程

 

二、SubVersion的使用

可以在

http://subversion.apache.org/packages.html下載SVN并安裝(本文使用windows版本,過(guò)程不多說(shuō))。在SVN中集成了服務(wù)器端和客戶端組件:

服務(wù)器組件(管理員用):svnadmin、svnserve

客戶端組件(程序員用):svn

這些組件命令都位于SubVersion安裝目錄下的bin目錄下。

友情提示:安裝完SVN后,通過(guò)”svnadmin –version”驗(yàn)證是否安裝成功。如果出現(xiàn)錯(cuò)誤“svnadmin不是內(nèi)部或外部命令”,則需要手動(dòng)將SVN的bin目錄加入到path環(huán)境變量下。

1、創(chuàng)建SVN倉(cāng)庫(kù)

1)先創(chuàng)建一個(gè)目錄:E:svnreporepoDemo1。后面就使用該目錄作為SVN倉(cāng)庫(kù)。

2)創(chuàng)建倉(cāng)庫(kù):svnadmin create E:svnreporepoDemo1。創(chuàng)建倉(cāng)庫(kù)后的目錄結(jié)構(gòu)如下:

 

基于windows平臺(tái)的SVN教程

 

3)啟動(dòng)SVN服務(wù):svnserve -d -r E:svnreporepoDemo1,如下圖:

 

基于windows平臺(tái)的SVN教程

 

這樣就啟動(dòng)了repoDemo1這個(gè)倉(cāng)庫(kù)的服務(wù)(單倉(cāng)庫(kù)),如果在svnrepo目錄下還有其他倉(cāng)庫(kù),且要同時(shí)啟動(dòng)多個(gè)倉(cāng)庫(kù),執(zhí)行svnserve -d -r E:svnrepo即可(多倉(cāng)庫(kù))。

一般情況下,訪問(wèn)SVN倉(cāng)庫(kù)的URL格式形如:

svn://192.168.1.6/repoDemo1,但如果啟動(dòng)的是單倉(cāng)庫(kù),則URL直接用:svn://192.168.1.6表示。svn協(xié)議的默認(rèn)端口號(hào)為3690。

小技巧:如果需要頻繁使用該倉(cāng)庫(kù),則可將該SVN服務(wù)注冊(cè)成windows服務(wù),這樣在計(jì)算機(jī)開機(jī)時(shí)就可以啟動(dòng)該服務(wù)。如下圖:

 

基于windows平臺(tái)的SVN教程

 

刪除該windows服務(wù):sc delete svnService。

2、SVN客戶端操作(命令行)

重點(diǎn):checkout(檢出)、commit(提交)、update(更新)

1)在E盤下建立user1、user2兩個(gè)目錄,模擬兩個(gè)協(xié)同工作的用戶的workspace。

2)檢出:第一次和SVN服務(wù)器交互時(shí),需要使用checkout將倉(cāng)庫(kù)檢出到本地。

 

基于windows平臺(tái)的SVN教程

 

說(shuō)明:檢出一次,就建立了與SVN倉(cāng)庫(kù)的連接。

3)提交:commit

在user1目錄下新建Demo1.java文件,將該文件提交到SVN倉(cāng)庫(kù)。下圖演示了三種典型的錯(cuò)誤提交。

 

基于windows平臺(tái)的SVN教程

 

4)更新:update

切換到user2的工作空間(user2目錄下),user2第一次使用SVN倉(cāng)庫(kù),需要檢出。user2修改Demo1.java后提交。切換到user1目錄,更新(update)。

 

基于windows平臺(tái)的SVN教程

 

5)刪除與恢復(fù):delete、revert

 

基于windows平臺(tái)的SVN教程

 

說(shuō)明:如果delete后,提交到服務(wù)器(commit),則服務(wù)器上的數(shù)據(jù)也被刪除了(慎用)。

三、SVN的目錄約定

/trunck:開發(fā)主線

/branches:支線副本

/tags:標(biāo)簽副本(一旦創(chuàng)建,不允許修改)

1)使用trunk作為主要的開發(fā)目錄

一般的,我們的所有的開發(fā)都是基于trunk進(jìn)行開發(fā),當(dāng)一個(gè)版本(release)開發(fā)告一段落(開發(fā)、測(cè)試、文檔、制作安裝程序、打包等結(jié)束后),代碼處于凍結(jié)狀態(tài)(人為規(guī)定,可以通過(guò)hook來(lái)進(jìn)行管理)。此時(shí)應(yīng)該基于當(dāng)前凍結(jié)的代碼庫(kù),打tag。

當(dāng)下一個(gè)版本/階段的開發(fā)任務(wù)開始時(shí),繼續(xù)在trunk進(jìn)行開發(fā)。此時(shí),如果發(fā)現(xiàn)了上一個(gè)已發(fā)行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在開發(fā)的版本(Developing Version)無(wú)法滿足時(shí)間要求,這時(shí)候就需要在上一個(gè)版本上進(jìn)行修改了。解決方法是基于發(fā)行版對(duì)應(yīng)的tag,做相應(yīng)的分支(branch)進(jìn)行開發(fā)。

2)下圖為struts2的SVN倉(cāng)庫(kù)目錄:

 

基于windows平臺(tái)的SVN教程

 

現(xiàn)在Struts2的代碼使用git管理,所以現(xiàn)在查看Struts2的SVN倉(cāng)庫(kù)是空的。

四、TortoiseSVN的使用

TortoiseSVN是現(xiàn)在最流行的SVN客戶端工具,使用圖形化界面和SVN倉(cāng)庫(kù)交互(作為命令行方式的替代)。關(guān)于TortoiseSVN的安裝省略。

安裝完成后,在任意位置右擊都能看到TortoiseSVN選項(xiàng)。

1、基本操作

1)創(chuàng)建倉(cāng)庫(kù)

創(chuàng)建目錄:E:svnreporepoDemo2,進(jìn)入該目錄下,右擊 — TortoiseSVN — Create repository here,并創(chuàng)建默認(rèn)的SVN目錄結(jié)構(gòu),如下圖所示:

 

基于windows平臺(tái)的SVN教程

 

2)檢出:checkout

在E盤下建立user3、user4兩個(gè)目錄,模擬兩個(gè)協(xié)同工作的用戶的workspace。

進(jìn)入user3目錄下,右擊 — SVN Checkout,在URL of repository中輸入:

file:///E:/svnrepo/repoDemo2。【此時(shí)倉(cāng)庫(kù)還沒(méi)有啟動(dòng)SVN服務(wù),所以使用file://】

 

基于windows平臺(tái)的SVN教程

 

3)提交:commit

在user3/trunk目錄下新建Demo1.java,在該文件上右擊 — TortoiseSVN — add,則將Demo1.java納入版本控制。然后右擊 — SVN Commit,提交至代碼倉(cāng)庫(kù)。

4)更新:update

對(duì)user4進(jìn)行上面的檢出操作。并修改user4目錄下的Demo1.java(如增加一個(gè)字段),并commit。

回到user3/trunk,右擊 — SVN Update。

5)啟動(dòng)SVN服務(wù)。這步需要在命令行中輸入:svnserve -d -r E:svnrepo

6)訪問(wèn)SVN倉(cāng)庫(kù)。在任意空白位置右擊 — TortoiseSVN — Repo browser,URL輸入:

svn://192.168.1.6/repoDemo2即可瀏覽SVN倉(cāng)庫(kù)中的內(nèi)容,如下。

 

基于windows平臺(tái)的SVN教程

 

2、其他操作

下面的操作都位于右鍵菜單的TortoiseSVN中。

1)刪除:delete

刪除文件或目錄,不能直接用Windows的刪除命令來(lái)操作,那樣只是沒(méi)有顯示出來(lái),實(shí)際并沒(méi)有刪除,在更新后,刪除的文件又會(huì)被更新出來(lái)的。要想從庫(kù)中刪除,必須選中你要?jiǎng)h除的內(nèi)容,TortoiseSVN — delete,這樣才會(huì)將這個(gè)文件標(biāo)記成要?jiǎng)h除的。確認(rèn)需要?jiǎng)h除后,使用前面所講的提交命令,就會(huì)真正的在庫(kù)中刪除了。

2)重命名:rename

重命名也不能直接用Windows的重命名命令來(lái)操作,必須選中你要重命名的文件,TortoiseSVN — rename。修改后提交就可以更新到倉(cāng)庫(kù)。

改名的處理方式相當(dāng)于新增了一個(gè)以新名稱命名的文件,原名稱命名的文件進(jìn)行了刪除。

3)還原:revert

在未提交之前,你對(duì)前面做的操作反悔了,可以使用revert來(lái)恢復(fù)。

4)檢查更新:Check for modifications

① 此功能可以顯示你所做的修改有哪些還沒(méi)有提交的。② 還可以看到版本庫(kù)里的改動(dòng),即別人提交了哪些文件的改動(dòng),你還沒(méi)更新到本地。

5)導(dǎo)出:export

使用SVN的工作空間每個(gè)目錄下面都有一個(gè).svn隱藏目錄,利用SVN的export命令可輕松地導(dǎo)出不含.svn目錄的工作空間。

3、沖突問(wèn)題的解決(☆)

何時(shí)發(fā)生:接著4.1節(jié)中的操作,假設(shè)user3和user4目錄下的Demo1.java都更新到了最新版本。user3修改Demo1.java,提交至倉(cāng)庫(kù)。若user4也修改Demo1.java并提交,此時(shí)user4的TortoiseSVN會(huì)報(bào)提交版本過(guò)時(shí)的錯(cuò)誤,并提醒user4需要更新,更新時(shí)就會(huì)發(fā)生沖突。如下圖:

 

基于windows平臺(tái)的SVN教程

 

對(duì)于每個(gè)更新沖突的文件,Subversion會(huì)在沖突文件所在目錄下放置了三個(gè)文件:

Demo1.java.mine:發(fā)生沖突時(shí)的本地版本。

Demo1.java.r3:最后更新之后的本地版本。

Demo1.java.r4:倉(cāng)庫(kù)中的最新版本。

解決方法 1:

① 在Demo1.java上右擊 — TortoiseSVN — Edit conflicts,這時(shí)你需要確定哪些代碼是需要的,做一些必要的修改然后保存。小技巧:編輯沖突時(shí),可使用直接復(fù)制需要的代碼到Merged窗口即可。

② 編輯完成后保存,直接選擇Mark as resolved,即標(biāo)記為沖突已解決。退出編輯沖突窗口,發(fā)現(xiàn)沖突發(fā)生時(shí)生成的三個(gè)文件被自動(dòng)刪除了,且Demo1.java變成了未提交狀態(tài)。

 

基于windows平臺(tái)的SVN教程

 

③ commit,OK。

解決方法 2:

直接修改Demo1.java,把其中的一些標(biāo)記刪除即可(前提是服務(wù)器上的和本地的內(nèi)容都需要保存)。

4、TortoiseSVN圖標(biāo)

 

基于windows平臺(tái)的SVN教程

 

部分圖標(biāo)的說(shuō)明:

normal:狀態(tài)正常

modified:對(duì)本地的副本做了修改,需要提交到服務(wù)器

conflicted:有沖突

readonly:文件是只讀的,要修改必須先獲取鎖

locked:獲得鎖

deleted:計(jì)劃從版本庫(kù)中刪除

added:已被計(jì)劃納入版本控制

non-versioned:未納入版本控制

5、認(rèn)證與授權(quán)

所謂認(rèn)證(Authentication),就是給使用該倉(cāng)庫(kù)的用戶分配一個(gè)用戶名和密碼,用戶在連接倉(cāng)庫(kù)的時(shí)候需要輸入用戶名/密碼。授權(quán)(Authorization)就是為指定用戶分配特定的權(quán)限,如只讀、讀寫等。認(rèn)證與授權(quán)的設(shè)置需要修改倉(cāng)庫(kù)conf目錄下的文件,如下:

authz:認(rèn)證文件,分配用戶名、密碼。

passwd:授權(quán)文件,為現(xiàn)有用戶分配組,并為組分配權(quán)限。

svnserve.conf:指定認(rèn)證、授權(quán)文件的位置。

1)修改conf/svnserve.conf

 

基于windows平臺(tái)的SVN教程

 

2)修改conf/passwd

 

基于windows平臺(tái)的SVN教程

 

3)修改conf/authz

 

基于windows平臺(tái)的SVN教程

 

這樣,當(dāng)用戶再次執(zhí)行checkout、commit、update時(shí),就會(huì)要求認(rèn)證。

五、subclipse插件的使用

Eclipse提供了集成SVN的插件 — subclipse,本文重點(diǎn)關(guān)注subclipse的使用。Eclipse中插件的安裝不是這兒的重點(diǎn)。安裝成功后,可以看到下面的視圖(Windows — Show View)和透視圖(Windows — Open Perspective):

 

基于windows平臺(tái)的SVN教程

 

下面的操作使用了4.1節(jié)中的資源庫(kù)(repoDemo2)。

1)關(guān)聯(lián)資源庫(kù)

進(jìn)入SVN資源庫(kù)研究透視圖,在SVN資源庫(kù)面板上右鍵 — 新建 — 資源庫(kù)位置,URL中輸入:

svn://192.168.1.6/repoDemo2。

2)共享項(xiàng)目:share Project

新建一個(gè)Java Project,名稱為svnProject,在項(xiàng)目中新建一個(gè)Demo1.java。

共享項(xiàng)目:在項(xiàng)目上右鍵 — Team — Share Project…,將項(xiàng)目導(dǎo)入到repoDemo2。在輸入文件夾名時(shí),一般選擇使用項(xiàng)目名稱作為文件夾名。

3)提交:Commit

共享之后,項(xiàng)目并沒(méi)有提交到倉(cāng)庫(kù)中,此時(shí)在項(xiàng)目上右鍵 — Team — Commit,就可以將現(xiàn)在的項(xiàng)目提交到倉(cāng)庫(kù)中。

4)檢出:Checkout

新建一個(gè)workspace,模擬另外一個(gè)用戶(user2)。首先還是關(guān)聯(lián)資源庫(kù),在svnProject上右鍵 — 檢出為。

 

基于windows平臺(tái)的SVN教程

 

在Demo1.java中新增一個(gè)字段并提交(在user2的workspace中做的)。

5)更新:

切換到user1的工作空間,更新項(xiàng)目。不多說(shuō),Team — update

6)沖突處理

沖突的產(chǎn)生見4.3節(jié)。原則:提交之前先更新。

4.3節(jié)中的兩種解決方法也適用于subclipse,解決方法1對(duì)應(yīng)著subclipse中的Synchronize視圖(View),解決方法2類同。

六、SVN與Apache整合(用到再看)

業(yè)務(wù)場(chǎng)景:在上面的Demo中,SVN倉(cāng)庫(kù)對(duì)外提供服務(wù)都是通過(guò)SVN協(xié)議,最直觀的體現(xiàn)就是URL都是以svn://開頭的。在開源項(xiàng)目中使用的SVN倉(cāng)庫(kù)對(duì)外提供服務(wù)時(shí)都是使用http協(xié)議,此時(shí)需要結(jié)合Apache服務(wù)器。

1)安裝Apache服務(wù)器(假定安裝在C:Apache2.2)

2)修改C:Apache2.2confhttpd.conf釋放掉注釋和增加紅色邊框的兩行(有順序要求)

 

基于windows平臺(tái)的SVN教程

 

3)從SVN安裝目錄的bin目錄下,拷貝mod_authz_svn.so和mod_dav_svn.so到C:Apache2.2modules目錄中

4)用Apache服務(wù)器的htpasswd創(chuàng)建密碼文件

 

基于windows平臺(tái)的SVN教程

 

5)拷貝project1_password到E:repositorysvnproject1conf目錄下

6)拷貝以下內(nèi)容到Apacheconfhttpd.conf最后

 

基于windows平臺(tái)的SVN教程

 

7)訪問(wèn)

http://localhost/svn/flyne/trunk即可訪問(wèn)SVN倉(cāng)庫(kù)。

本文由網(wǎng)上采集發(fā)布,不代表我們立場(chǎng),轉(zhuǎn)載聯(lián)系作者并注明出處:http://m.zltfw.cn/shbk/37452.html

聯(lián)系我們

在線咨詢:點(diǎn)擊這里給我發(fā)消息

微信號(hào):15705946153

工作日:9:30-18:30,節(jié)假日休息