SVN

SVN簡(jiǎn)介:

Subversion是什么?

它是一個(gè)自由/開(kāi)源的版本控制系統(tǒng),一組文件存放在中心版本庫(kù),記錄每一次文件和目錄的修改,Subversion允許把數(shù)據(jù)恢復(fù)到早期版本,或是檢查數(shù)據(jù)修改的歷史,Subversion可以通過(guò)網(wǎng)絡(luò)訪問(wèn)它的版本庫(kù),從而使用戶在不同的電腦上進(jìn)行操作。

一:SVN服務(wù)器搭建和使用。

  1. 首先來(lái)下載和搭建SVN服務(wù)器,下載地址如下: [http://subversion.apache.org/packages.html](http://subversion.apache.org/packages.html),進(jìn)入網(wǎng)址后,滾動(dòng)到瀏覽器最底部看到如下截圖:
    
image
  個(gè)人認(rèn)為最好用VisualSVN server 服務(wù)端和 TortoiseSVN客戶端搭配使用. 點(diǎn)開(kāi)上面的VisualSVN連接,下載VisualSVN server,下載完成后雙擊安裝,如下圖:

![image](http://upload-images.jianshu.io/upload_images/9293679-5bbf36d83abcc

點(diǎn)擊Next下一步,如下:

image

然后再點(diǎn)擊Next項(xiàng),下一步,如下:

image

點(diǎn)擊【Next】 如下:

image
image

Location是指VisualSVN Server的安裝目錄,Repositorys是指定你的版本庫(kù)目錄.Server Port指定一個(gè)端口,Use secure connection勾山表示使用安全連接,

點(diǎn)擊Next,進(jìn)入下一步,如下圖:

image

再點(diǎn)擊【Install】,進(jìn)入如下安裝圖:

image

等待安裝完成后,點(diǎn)擊【next】,進(jìn)入下一步:如下圖

image

點(diǎn)擊【Finish】即可完成安裝。安裝完成后,啟動(dòng)VisualSVN Server Manager,如圖:

image

可以在窗口的右邊看到版本庫(kù)的一些信息,比如狀態(tài),日志,用戶認(rèn)證,版本庫(kù)等.

要建立版本庫(kù),需要右鍵單擊左邊窗口的Repositores,如下圖:

image

在彈出的右鍵菜單中選擇Create New Repository或者新建->Repository:

image

進(jìn)入下一步,如下圖:

image

點(diǎn)擊【下一步】,如下圖:

image

點(diǎn)擊【create】,如下圖:

image

點(diǎn)擊【Finish】即可完成基本創(chuàng)建。

2. 需要建立用戶和組,并且需要分配權(quán)限。

1. 在VisualSVN Server Manager窗口的左側(cè)右鍵單擊用戶組,選擇Create User或者新建->User,如圖:

image

點(diǎn)擊User后,進(jìn)入如下圖:

image

填寫(xiě)Username和password后,點(diǎn)擊ok按鈕后,進(jìn)入如下圖:

image

點(diǎn)擊上面的【Add】按鈕后,如下圖

image

增加longen0707到用戶中(如果有多個(gè)用戶,操作一樣)。

2 . 然后我們建立用戶組,在VisualSVN Server Manager窗口的左側(cè)右鍵單擊用戶組,選擇Create Group或者新建->Group,如圖:

image

點(diǎn)擊【Group】按鈕后,進(jìn)入如下圖:

image

在彈出窗口中填寫(xiě)Group name為Developers,然后點(diǎn)Add按鈕,在彈出的窗口中選擇Developer,加入到這個(gè)組,然后點(diǎn)Ok.

接下來(lái)我們需要給用戶組設(shè)置權(quán)限,在MyRepository上單擊右鍵,選擇屬性,如圖:

image

在彈出的對(duì)話框中,選擇Security選項(xiàng)卡,點(diǎn)擊Add按鈕,選中l(wèi)ongen0707,然后添加進(jìn)來(lái),權(quán)限設(shè)置為Read/Write,如下圖:

image

點(diǎn)擊【確定】按鈕即可。

二:客戶端SVN安裝。

1.首先我們需要下載 ”svn小烏龜”后,進(jìn)行安裝。比如我下載如下的:

image

安裝完成后,比如在我的項(xiàng)目在qiandaun1中,我右鍵就可以看到如下:

image

說(shuō)明snv已經(jīng)安裝成功了!

2:checkout項(xiàng)目文件。

新建或者進(jìn)入目錄下(比如qianduan1),右鍵 --> Svn Checkout -->
image

其中URL我可以在SVN服務(wù)器獲取到,我在myRepositories下右鍵新建文件

image

qianduan文件被建立,然后比如我這樣右鍵 --> copy下

image

即可。

將復(fù)制的版本庫(kù)URL粘貼上,如下圖:

image

點(diǎn)擊【ok】按鈕后,就可以檢索出來(lái),如下:

image

如下圖:

image

注意事項(xiàng):

.svn這個(gè)隱藏目錄記錄著兩項(xiàng)關(guān)鍵信息:工作文件的基準(zhǔn)版本和一個(gè)本地副本最后更新的時(shí)間戳,千萬(wàn)不要手動(dòng)修改或者刪除這個(gè).svn隱藏目錄和里面的文件!!,否則將會(huì)導(dǎo)致你本地的工作拷貝(靜態(tài)試圖)被破壞,無(wú)法再進(jìn)行操作。

  1. TortoiseSVN圖標(biāo)介紹
image

一個(gè)新檢出的工作復(fù)本使用綠色的對(duì)勾重載,表示Subversion狀態(tài)正常。

image

在你開(kāi)始編輯一個(gè)文件之后,狀態(tài)就變成了已修改,而圖標(biāo)重載已變成了紅色感嘆號(hào)。通過(guò)這種方式,你可以很容易地看出那些文件從你上次更新工作復(fù)本被修改過(guò),且需要提交。

image

如果在提交的過(guò)程中出現(xiàn)了沖突,圖標(biāo)就會(huì)變成了黃色感嘆號(hào)。

image

加號(hào)告訴你有一個(gè)文件或者目錄已經(jīng)被計(jì)劃加入到版本控制中。

  1. TortoiseSVN Client基礎(chǔ)操作:
    
    1. SVN檢出(SVN Checkout)

    在文件夾或者目錄下單擊右鍵 –> 選擇SVN檢出,如下圖所示

image

點(diǎn)擊后,在彈開(kāi)窗口的版本庫(kù)url框中輸入版本庫(kù)的目錄地址,然后點(diǎn)擊確定,如下圖

image

再點(diǎn)擊ok按鈕后,如下圖:

在彈出的對(duì)話框中輸入用戶名和密碼,驗(yàn)證成功后,項(xiàng)目文件開(kāi)始從遠(yuǎn)程服務(wù)器下載到本地工作目錄中。

image

點(diǎn)擊ok按鈕后,即可獲取完成,如下圖所示:

2. 增加(Add)

在test項(xiàng)目文件下,新建一個(gè)b.txt文件,提交到版本庫(kù)的方法如下2種:

1. 先提到變更列表中,再commit到配置庫(kù)中,選擇新增文件,右鍵SVN菜單執(zhí)行“Add“操作提交到”變更列表中”,然后右鍵SVN菜單執(zhí)行”SVN Commit”提交到版本庫(kù)中。

2. 不提交到變更列表中,而是直接commit配置庫(kù)中,選擇該文件,右鍵svn菜單執(zhí)行”SVN Commit”操作。

3. 刪除(Delete)

 如果被刪除的文件還未入版本庫(kù),則可以直接使用操作系統(tǒng)的刪除操作刪除該文件。

 如果被刪除的文件已入版本庫(kù),則刪除的方法如下:
  1. 選擇被刪除文件,右鍵svn菜單執(zhí)行”delete”操作,然后選擇被刪除文件的父目錄,右鍵svn菜單執(zhí)行”SVN Commit”.

使用操作系統(tǒng)的刪除操作刪除該文件,然后選擇被刪除文件的父目錄,右鍵svn菜單執(zhí)行”SVN Commit”,在變更列表中選擇被刪除的文件。如下圖:

image
  1. 改名(Rename)
修改文件名,選中需要重命名的文件或文件夾,然后右鍵“TortoiseSVNàRename“,在彈出的對(duì)話框中輸入新名稱,點(diǎn)擊”ok”按鈕,并將修改文件名后的文件或文件夾通過(guò) “SVN Commit”提交到SVN服務(wù)器上。

5. SVN還原(SVN Revert)

右擊想要回退的文件或者文件夾,在TortoiseSVN彈出菜單中選擇”Update to reversion…” 然后會(huì)彈出一個(gè)窗口,如下:
image

比如說(shuō)我們要回退到第10個(gè)版本只需要在Revision中填寫(xiě)相應(yīng)的版本號(hào),然后點(diǎn)擊ok即可。

6. 檢查更新(Check for modifications)

 此功能可以顯示你所做的修改有哪些還沒(méi)有提交的,此功能不光能看到對(duì)文件的修改變化,所有的變化都能看到,包括增加文件或者目錄,刪除文件或者目錄,移動(dòng)文件或者目錄等,如果你點(diǎn)擊了檢查版本庫(kù),那你還可以看到版本庫(kù)里的改動(dòng),既別人提交了哪些文件的改動(dòng),你還沒(méi)更新到本地,如下:
image
  1. SVN更新(SVN Update)
更新本地代碼與SVN服務(wù)器上最新的版本一致,只要在需要更新的文件夾上點(diǎn)擊右鍵或者在文件下空白處點(diǎn)擊右鍵,選擇”SVN Update” (獲取指定版本中的內(nèi)容,點(diǎn)擊右鍵執(zhí)行SVN菜單中的“Update to reversion“),就可以了。

7.1 如何解決沖突文件

 對(duì)于每個(gè)沖突的文件Subversion在你的目錄下放置了三個(gè)文件:如下:
image
 為什么會(huì)產(chǎn)生沖突代碼呢?原因很簡(jiǎn)單就是因?yàn)椴煌娜?,同時(shí)修改了同一個(gè)文件的同一個(gè)地方,這時(shí)候,他提交了,我沒(méi)有提交,我就提交不了,這個(gè)時(shí)候我們要進(jìn)行先更新,然后在進(jìn)行提交即可,那如果產(chǎn)生沖突,會(huì)生成如上3個(gè)文件。 

解決方案如下:

  首先我們可以看下1.txt代碼如下:

    <<<<<<< .mine

    aaaasdf11222333 dderderder

    =======

   b>>>>>>> .r5

  然后我去掉多余的代碼,1.txt變成這樣

  aaaasdf11222333 dderderder

  進(jìn)行提交,還是提交不了,如下所示:

![image](http://upload-images.jianshu.io/upload_images/9293679-9b6b2b7f9c26fbaf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

為什么?因?yàn)闆_突會(huì)產(chǎn)生上面的三個(gè)文件,有上面3個(gè)文件存在肯定提交不了,這三個(gè)文件代碼及解釋如下:

  1. 1.txt.mine 是沖突前自己的文件。可以看下內(nèi)容如下:

    aaaasdf11222333 dderderder

    2. 1.txt.r4 是沖突前本地的版本文件

    內(nèi)容如下:aaaasdf11222333

    3. 1.txt.r5 是別人趕在你之前提交的版本

    內(nèi)容如下: b

其中,<<<<<<<<.mine .....=======之間的代碼是你自己的,而======......>>>>>>>.r5是別人與你沖突的代碼部分

這樣就不難理解為什么會(huì)產(chǎn)生沖突這種奇怪的東西了,因?yàn)槟銈冃薷牡耐粔K代碼,當(dāng)然會(huì)產(chǎn)生沖突。

解決方案如下:

  1. 假如我現(xiàn)在的1.txt中的沖突內(nèi)容如下:

    <<<<<<< .mine

    6666666666666600000

    =======

    66666666666aaaaaaaaaa666

    .r16
    前面說(shuō)過(guò) <<<<<<< .mine …… =======

    ……之間的代碼是我未產(chǎn)生沖突之前修改的代碼,

    ======= ………>>>>>>> .r16 這中間……的代碼是別人與我沖突代碼的部分,從上面的代碼可以看到 aaaaaaaaa是我同事新增的 ,00000是我后增加的。

    1. 使用revert(回滾)操作,該操作表示用戶放棄自己的更新代碼,然后直接提交,這個(gè)時(shí)候你的代碼就會(huì)使服務(wù)器上最新的代碼,即A用戶提交的新代碼,你的代碼不會(huì)被提交,如下所示:
      image
      image

      點(diǎn)擊ok按鈕后 可以看到其他三個(gè)文件都自動(dòng)刪掉了,1.txt代碼變成如下代碼:

      66666666666aaaaaaaaaa666

      也就是a用戶提交的代碼,我自己更新的代碼需要自己動(dòng)手復(fù)制進(jìn)去即可提交commit。

    2. 假如我現(xiàn)在3.txt產(chǎn)生沖突代碼如下:

      <<<<<<< .mine

      333333338888888888888=======

      3333cccccccccc3333>>>>>>> .r16

      通過(guò)第一點(diǎn)我們知道,333333338888888888888這個(gè)內(nèi)容是我修改后,未產(chǎn)生沖突之前的內(nèi)容,3333cccccccccc3333這個(gè)代碼是A用戶提交的代碼,從上面得知 A用戶新增內(nèi)容是ccccccc,而我新增的內(nèi)容是8888888。

      那么第二種解決方法如下:

              選擇文件->右鍵Editconficts:這種方法需要沖突雙方經(jīng)過(guò)協(xié)商之后將代碼更改統(tǒng)一之后再提交。不僅解決了沖突而且還保證了代碼是正確的,因?yàn)橹挥幸环降拇a被提交.
      
    image

如上圖所示,紅色的部分是沖突代碼:theirs表示當(dāng)前服務(wù)器端最新的代碼,Mine表示自己修改后的代碼,Merged表示合并后的代碼。點(diǎn)擊紅色后右鍵選擇:use this text block就可以將該部分代碼作為合并后的代碼

接下來(lái)再說(shuō)說(shuō)由于沖突導(dǎo)致重要代碼被覆蓋的情況。沖突發(fā)生時(shí)如果采取的措施不對(duì)可能會(huì)導(dǎo)致部分代碼丟失,如果想要還原之前的代碼也很容易。

選擇文件->右鍵選擇show log在這里面你可以看見(jiàn)之前提交的所有版本,找到你想要恢復(fù)的版本右鍵選擇revert to this version 就可以恢復(fù)了.

SVN提交(SVN Commit)

Svn的提交是將在工作空間做的修改進(jìn)行提交,包括文件內(nèi)容的修改,文件或目錄的添加,刪除,命名,移動(dòng)等操作。如下圖所示:
image
  1. 顯示日志(Show log)

    通過(guò)此功能可以查到誰(shuí),什么時(shí)候,對(duì)那個(gè)目錄下的那些文件進(jìn)行了那些操作,如下圖:

image
  1. 版本庫(kù)瀏覽(Repo-browser)

    此功能是用來(lái)瀏覽需要查看的資料庫(kù),在本地文件夾下點(diǎn)擊右鍵,選擇TortoiseSVNàRepo-browser,在彈出的對(duì)話框中輸入資料庫(kù)地址,再輸入用戶名和密碼,就能查看到你需要查看到版本庫(kù)的內(nèi)容,在這你還能看到那些文件被誰(shuí)鎖定了,如下圖:

image

三: 創(chuàng)建分支合并相互操作

項(xiàng)目中為何要?jiǎng)?chuàng)建分支,及合并?

  比如我現(xiàn)在項(xiàng)目所有的文件放在主干上(trunk)中,由于需求的變更,需要增加新的需求,但是我們主干上還要繼續(xù)往下開(kāi)發(fā),在此我們可以新建一個(gè)分支,來(lái)做增加新的需求那一塊,主干上繼續(xù)開(kāi)發(fā),等分支上代碼沒(méi)有問(wèn)題的時(shí)候,再合并到主干上來(lái)。

創(chuàng)建分支的最大的目的就是跟主線進(jìn)行并行開(kāi)發(fā)時(shí)候不影響主線的開(kāi)發(fā)。

如何操作?

  假如我本地新建一個(gè)文件夾test下有2個(gè)文件夾trunk(存放主干上的代碼)和branch(存放分支上的代碼),如下所示:
image

一:先提取主干上的代碼。

點(diǎn)擊trunk --> 鼠標(biāo)右鍵 --> 點(diǎn)擊SVN Checkout --> 彈出一個(gè)對(duì)話框,如下圖所示:

image

其中上面的URL是從服務(wù)器VisualSVN Server上獲取的,如下所示:

image

直接右鍵qianduan3 --> Copy URL to Clipboard 即可。

其中qianduan3項(xiàng)目有如下文件,如下圖所示:

image

最后點(diǎn)擊上面的checkout按鈕后,就可以在主干上把代碼從遠(yuǎn)程服務(wù)器上獲取到,如下所示:

image

二:新建分支

從trunk(主干上)創(chuàng)建分支(branch)步驟如下:

1. 右鍵trunk --> branch/Tag 如下圖:

image

在彈出的對(duì)話框如下圖:

image

點(diǎn)擊ok按鈕后,就可以在VisualSVN Serval服務(wù)器上新增newBranch,是從如上服務(wù)器qianduan3上的文件拷貝一份的,如下所示:

image

現(xiàn)在我們可以再來(lái)看看本地branch文件夾了,我現(xiàn)在直接進(jìn)入branch文件下,右鍵 --> Chenckout下,就可以把newBranch下的所有文件提取出來(lái)了,如下所示:

image
image

點(diǎn)擊ok按鈕就可以把文件提取出來(lái)了,如下圖所示:

image

分支目前建立在svn的服務(wù)器端,本地并沒(méi)有更新,對(duì)本地branch文件夾 右鍵--> update即可,就可以更新到分支代碼,如下所示:

image

四:合并分支到主干上

比如我現(xiàn)在對(duì)branch分支上新增3.txt文件,然后提交上去,如下所示:

image

我現(xiàn)在想把分支上的代碼3.txt合并到主干上trunk,現(xiàn)在要怎么合并呢?步驟如下:

1. 回到我們剛剛的主干(trunk)文件夾下,鼠標(biāo)右鍵該文件夾 --> TortoiseSVN --> Merge 如下圖所示:

image

在彈出的窗口,如下圖所示:

image

接著點(diǎn)擊【Next】下一步,如下圖所示:

image

再接著【Next】下一步,如下圖所示:

image
image

就可以看到主干trunk上多加了一個(gè)3.txt,就是從分支上合并過(guò)來(lái)的。

五:合并主干到分支。

如果主干上有一些更新,比如說(shuō)jar包更新等等,那么這些要更新到分支上去,如何操作呢?比如我現(xiàn)在在主干上新建一個(gè)4.txt文件,比如如下:

image

我現(xiàn)在的分支上目錄如下:

image

現(xiàn)在是想把主干上的4.txt合并到分支上來(lái),要如何操作?

步驟如下,還是和剛剛操作類似.

1. 我們?cè)诜种c(diǎn)擊branch --> 右鍵TortoiseSVN --> Merge 如下圖所示:

image

在彈出新窗口后,如下圖所示:

image

接著點(diǎn)擊【Next】下一步,如下圖所示:

image

繼續(xù)下一步,如下圖:

image

最后直接merge,就可以看到分支branch上也有主干上的4.txt文件了,也就是說(shuō),合并主干到分支上也是可以的,如下圖所示:

image

</article>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一般企業(yè)SVN配置:TortoiseSVN和VisualSVN Server黃金組合,最主要是免費(fèi)的Tortois...
    西門丨不吹雪閱讀 2,071評(píng)論 1 5
  • 命令的使用 1、檢出 svn cohttp://路徑(目錄或文件的全路徑)[本地目錄全路徑] --username...
    小李龍彪閱讀 4,541評(píng)論 0 9
  • 3個(gè)問(wèn)題 安裝優(yōu)化軟件環(huán)境nginx,lvs <== 運(yùn)維工程師 程序代碼(不斷更新)<==開(kāi)發(fā)工程師,開(kāi)發(fā)+運(yùn)維...
    木心若素閱讀 8,286評(píng)論 1 7
  • 背景:在日常項(xiàng)目開(kāi)發(fā)及版本迭代的過(guò)程中,經(jīng)常會(huì)遇到這樣的場(chǎng)景:當(dāng)前版本提交QA測(cè)試之后,一方面需要在主干上開(kāi)發(fā)下一...
    HMonkey閱讀 10,039評(píng)論 4 24
  • SVN SVN使用 基本操作svn checkout:把項(xiàng)目源碼下載到本地,只需要做一次svn update:將本...
    彼岸的黑色曼陀羅閱讀 1,753評(píng)論 0 4

友情鏈接更多精彩內(nèi)容