SVN簡介:html
爲何要使用SVN?程序員
程序員在編寫程序的過程當中,每一個程序員都會生成不少不一樣的版本,這就須要程序員有效的管理代碼,在須要的時候能夠迅速,準確取出相應的版本。apache
Subversion是什麼?瀏覽器
它是一個自由/開源的版本控制系統,一組文件存放在中心版本庫,記錄每一次文件和目錄的修改,Subversion容許把數據恢復到早期版本,或是檢查數據修改的歷史,Subversion能夠經過網絡訪問它的版本庫,從而使用戶在不一樣的電腦上進行操做。安全
一:SVN服務器搭建和使用。服務器
1. 首先來下載和搭建SVN服務器,下載地址以下: http://subversion.apache.org/packages.html,進入網址後,滾動到瀏覽器最底部看到以下截圖:網絡
我的認爲最好用VisualSVN server 服務端和 TortoiseSVN客戶端搭配使用. 點開上面的VisualSVN鏈接,下載VisualSVN server,下載完成後雙擊安裝,以下圖:svn
點擊Next下一步,以下:this
而後再點擊Next項,下一步,以下:url
點擊【Next】 以下:
Location是指VisualSVN Server的安裝目錄,Repositorys是指定你的版本庫目錄.Server Port指定一個端口,Use secure connection勾山表示使用安全鏈接,
點擊Next,進入下一步,以下圖:
再點擊【Install】,進入以下安裝圖:
等待安裝完成後,點擊【next】,進入下一步:以下圖
點擊【Finish】便可完成安裝。安裝完成後,啓動VisualSVN Server Manager,如圖:
能夠在窗口的右邊看到版本庫的一些信息,好比狀態,日誌,用戶認證,版本庫等.
要創建版本庫,須要右鍵單擊左邊窗口的Repositores,以下圖:
在彈出的右鍵菜單中選擇Create New Repository或者新建->Repository:
進入下一步,以下圖:
點擊【下一步】,以下圖:
點擊【create】,以下圖:
點擊【Finish】便可完成基本建立。
2. 須要創建用戶和組,而且須要分配權限。
1. 在VisualSVN Server Manager窗口的左側右鍵單擊用戶組,選擇Create User或者新建->User,如圖:
點擊User後,進入以下圖:
填寫Username和password後,點擊ok按鈕後,進入以下圖:
點擊上面的【Add】按鈕後,以下圖
增長longen0707到用戶中(若是有多個用戶,操做同樣)。
2 . 而後咱們創建用戶組,在VisualSVN Server Manager窗口的左側右鍵單擊用戶組,選擇Create Group或者新建->Group,如圖:
點擊【Group】按鈕後,進入以下圖:
在彈出窗口中填寫Group name爲Developers,而後點Add按鈕,在彈出的窗口中選擇Developer,加入到這個組,而後點Ok.
接下來咱們須要給用戶組設置權限,在MyRepository上單擊右鍵,選擇屬性,如圖:
在彈出的對話框中,選擇Security選項卡,點擊Add按鈕,選中longen0707,而後添加進來,權限設置爲Read/Write,以下圖:
點擊【肯定】按鈕便可。
二:客戶端SVN安裝。
1.首先咱們須要下載 」svn小烏龜」後,進行安裝。好比我下載以下的:
安裝完成後,好比在個人項目在qiandaun1中,我右鍵就能夠看到以下:
說明snv已經安裝成功了!
2:checkout項目文件。
新建或者進入目錄下(好比qianduan1),右鍵 --> Svn Checkout -->
其中URL我能夠在SVN服務器獲取到,我在myRepositories下右鍵新建文件
qianduan文件被創建,而後好比我這樣右鍵 --> copy下
便可。
將複製的版本庫URL粘貼上,以下圖:
點擊【ok】按鈕後,就能夠檢索出來,以下:
以下圖:
注意事項:
.svn這個隱藏目錄記錄着兩項關鍵信息:工做文件的基準版本和一個本地副本最後更新的時間戳,千萬不要手動修改或者刪除這個.svn隱藏目錄和裏面的文件!!,不然將會致使你本地的工做拷貝(靜態試圖)被破壞,沒法再進行操做。
1) TortoiseSVN圖標介紹
一個新檢出的工做複本使用綠色的對勾重載,表示Subversion狀態正常。
在你開始編輯一個文件以後,狀態就變成了已修改,而圖標重載已變成了紅色感嘆號。經過這種方式,你能夠很容易地看出那些文件從你上次更新工做複本被修改過,且須要提交。
若是在提交的過程當中出現了衝突,圖標就會變成了黃色感嘆號。
加號告訴你有一個文件或者目錄已經被計劃加入到版本控制中。
2) TortoiseSVN Client基礎操做:
1. SVN檢出(SVN Checkout)
在文件夾或者目錄下單擊右鍵 –> 選擇SVN檢出,以下圖所示
點擊後,在彈開窗口的版本庫url框中輸入版本庫的目錄地址,而後點擊肯定,以下圖
再點擊ok按鈕後,以下圖:
在彈出的對話框中輸入用戶名和密碼,驗證成功後,項目文件開始從遠程服務器下載到本地工做目錄中。
點擊ok按鈕後,便可獲取完成,以下圖所示:
2. 增長(Add)
在test項目文件下,新建一個b.txt文件,提交到版本庫的方法以下2種:
1. 先提到變動列表中,再commit到配置庫中,選擇新增文件,右鍵SVN菜單執行「Add「操做提交到」變動列表中」,而後右鍵SVN菜單執行」SVN Commit」提交到版本庫中。
2. 不提交到變動列表中,而是直接commit配置庫中,選擇該文件,右鍵svn菜單執行」SVN Commit」操做。
3. 刪除(Delete)
若是被刪除的文件還未入版本庫,則能夠直接使用操做系統的刪除操做刪除該文件。
若是被刪除的文件已入版本庫,則刪除的方法以下:
選擇被刪除文件,右鍵svn菜單執行」delete」操做,而後選擇被刪除文件的父目錄,右鍵svn菜單執行」SVN Commit」.
使用操做系統的刪除操做刪除該文件,而後選擇被刪除文件的父目錄,右鍵svn菜單執行」SVN Commit」,在變動列表中選擇被刪除的文件。以下圖:
4. 更名(Rename)
修改文件名,選中須要重命名的文件或文件夾,而後右鍵「TortoiseSVNàRename「,在彈出的對話框中輸入新名稱,點擊」ok」按鈕,並將修改文件名後的文件或文件夾經過 「SVN Commit」提交到SVN服務器上。
5. SVN還原(SVN Revert)
右擊想要回退的文件或者文件夾,在TortoiseSVN彈出菜單中選擇」Update to reversion…」 而後會彈出一個窗口,以下:
好比說咱們要回退到第10個版本只須要在Revision中填寫相應的版本號,而後點擊ok便可。
6. 檢查更新(Check for modifications)
此功能能夠顯示你所作的修改有哪些尚未提交的,此功能不光能看到對文件的修改變化,全部的變化都能看到,包括增長文件或者目錄,刪除文件或者目錄,移動文件或者目錄等,若是你點擊了檢查版本庫,那你還能夠看到版本庫裏的改動,既別人提交了哪些文件的改動,你還沒更新到本地,以下:
7. SVN更新(SVN Update)
更新本地代碼與SVN服務器上最新的版本一致,只要在須要更新的文件夾上點擊右鍵或者在文件下空白處點擊右鍵,選擇」SVN Update」 (獲取指定版本中的內容,點擊右鍵執行SVN菜單中的「Update to reversion「),就能夠了。
7.1 如何解決衝突文件
對於每一個衝突的文件Subversion在你的目錄下放置了三個文件:以下:
爲何會產生衝突代碼呢?緣由很簡單就是由於不一樣的人,同時修改了同一個文件的同一個地方,這時候,他提交了,我沒有提交,我就提交不了,這個時候咱們要進行先更新,而後在進行提交便可,那若是產生衝突,會生成如上3個文件。
解決方案以下:
首先咱們能夠看下1.txt代碼以下:
<<<<<<< .mine
aaaasdf11222333 dderderder
=======
b>>>>>>> .r5
而後我去掉多餘的代碼,1.txt變成這樣
aaaasdf11222333 dderderder
進行提交,仍是提交不了,以下所示:
爲何?由於衝突會產生上面的三個文件,有上面3個文件存在確定提交不了,這三個文件代碼及解釋以下:
1.txt.mine 是衝突前本身的文件。能夠看下內容以下:
aaaasdf11222333 dderderder
2. 1.txt.r4 是衝突前本地的版本文件
內容以下:aaaasdf11222333
3. 1.txt.r5 是別人趕在你以前提交的版本
內容以下: b
其中,<<<<<<<<.mine .....=======之間的代碼是你本身的,而======......>>>>>>>.r5是別人與你衝突的代碼部分
這樣就不難理解爲何會產生衝突這種奇怪的東西了,由於大家修改的同一塊代碼,固然會產生衝突。
解決方案以下:
假如我如今的1.txt中的衝突內容以下:
<<<<<<< .mine
6666666666666600000
=======
66666666666aaaaaaaaaa666
>>>>>>> .r16
前面說過 <<<<<<< .mine …… =======
……之間的代碼是我未產生衝突以前修改的代碼,
======= ………>>>>>>> .r16 這中間……的代碼是別人與我衝突代碼的部分,從上面的代碼能夠看到 aaaaaaaaa是我同事新增的 ,00000是我後增長的。
使用revert(回滾)操做,該操做表示用戶放棄本身的更新代碼,而後直接提交,這個時候你的代碼就會使服務器上最新的代碼,即A用戶提交的新代碼,你的代碼不會被提交,以下所示:
點擊ok按鈕後 能夠看到其餘三個文件都自動刪掉了,1.txt代碼變成以下代碼:
66666666666aaaaaaaaaa666
也就是a用戶提交的代碼,我本身更新的代碼須要本身動手複製進去便可提交commit。
假如我如今3.txt產生衝突代碼以下:
<<<<<<< .mine
333333338888888888888=======
3333cccccccccc3333>>>>>>> .r16
經過第一點咱們知道,333333338888888888888這個內容是我修改後,未產生衝突以前的內容,3333cccccccccc3333這個代碼是A用戶提交的代碼,從上面得知 A用戶新增內容是ccccccc,而我新增的內容是8888888。
那麼第二種解決方法以下:
選擇文件->右鍵Editconficts:這種方法須要衝突雙方通過協商以後將代碼更改統一以後再提交。不只解決了衝突並且還保證了代碼是正確的,由於只有一方的代碼被提交.
如上圖所示,紅色的部分是衝突代碼:theirs表示當前服務器端最新的代碼,Mine表示本身修改後的代碼,Merged表示合併後的代碼。點擊紅色後右鍵選擇:use this text block就能夠將該部分代碼做爲合併後的代碼
接下來再說說因爲衝突致使重要代碼被覆蓋的狀況。衝突發生時若是採起的措施不對可能會致使部分代碼丟失,若是想要還原以前的代碼也很容易。
選擇文件->右鍵選擇show log在這裏面你能夠看見以前提交的全部版本,找到你想要恢復的版本右鍵選擇revert to this version 就能夠恢復了.
SVN提交(SVN Commit)
Svn的提交是將在工做空間作的修改進行提交,包括文件內容的修改,文件或目錄的添加,刪除,命名,移動等操做。以下圖所示:
8. 顯示日誌(Show log)
經過此功能能夠查到誰,何時,對那個目錄下的那些文件進行了那些操做,以下圖:
9. 版本庫瀏覽(Repo-browser)
此功能是用來瀏覽須要查看的資料庫,在本地文件夾下點擊右鍵,選擇TortoiseSVNàRepo-browser,在彈出的對話框中輸入資料庫地址,再輸入用戶名和密碼,就能查看到你須要查看到版本庫的內容,在這你還能看到那些文件被誰鎖定了,以下圖:
三: 建立分支合併相互操做
項目中爲什麼要建立分支,及合併?
好比我如今項目全部的文件放在主幹上(trunk)中,因爲需求的變動,須要增長新的需求,可是咱們主幹上還要繼續往下開發,在此咱們能夠新建一個分支,來作增長新的需求那一塊,主幹上繼續開發,等分支上代碼沒有問題的時候,再合併到主幹上來。
建立分支的最大的目的就是跟主線進行並行開發時候不影響主線的開發。
如何操做?
假如我本地新建一個文件夾test下有2個文件夾trunk(存放主幹上的代碼)和branch(存放分支上的代碼),以下所示:
1:先提取主幹上的代碼。
點擊trunk --> 鼠標右鍵 --> 點擊SVN Checkout --> 彈出一個對話框,以下圖所示:
其中上面的URL是從服務器VisualSVN Server上獲取的,以下所示:
直接右鍵qianduan3 --> Copy URL to Clipboard 便可。
其中qianduan3項目有以下文件,以下圖所示:
最後點擊上面的checkout按鈕後,就能夠在主幹上把代碼從遠程服務器上獲取到,以下所示:
2:新建分支
從trunk(主幹上)建立分支(branch)步驟以下:
1. 右鍵trunk --> branch/Tag 以下圖:
在彈出的對話框以下圖:
點擊ok按鈕後,就能夠在VisualSVN Serval服務器上新增newBranch,是從如上服務器qianduan3上的文件拷貝一份的,以下所示:
如今咱們能夠再來看看本地branch文件夾了,我如今直接進入branch文件下,右鍵 --> Chenckout下,就能夠把newBranch下的全部文件提取出來了,以下所示:
點擊ok按鈕就能夠把文件提取出來了,以下圖所示:
分支目前創建在svn的服務器端,本地並無更新,對本地branch文件夾 右鍵--> update便可,就能夠更新到分支代碼,以下所示:
四:合併分支到主幹上
好比我如今對branch分支上新增3.txt文件,而後提交上去,以下所示:
我如今想把分支上的代碼3.txt合併到主幹上trunk,如今要怎麼合併呢?步驟以下:
1. 回到咱們剛剛的主幹(trunk)文件夾下,鼠標右鍵該文件夾 --> TortoiseSVN --> Merge 以下圖所示:
在彈出的窗口,以下圖所示:
接着點擊【Next】下一步,以下圖所示:
再接着【Next】下一步,以下圖所示:
就能夠看到主幹trunk上多加了一個3.txt,就是從分支上合併過來的。
五:合併主幹到分支。
若是主幹上有一些更新,好比說jar包更新等等,那麼這些要更新到分支上去,如何操做呢?好比我如今在主幹上新建一個4.txt文件,好比以下:
我如今的分支上目錄以下:
如今是想把主幹上的4.txt合併到分支上來,要如何操做?
步驟以下,仍是和剛剛操做相似.
1. 咱們在分支點擊branch --> 右鍵TortoiseSVN --> Merge 以下圖所示:
在彈出新窗口後,以下圖所示:
接着點擊【Next】下一步,以下圖所示:
繼續下一步,以下圖:
最後直接merge,就能夠看到分支branch上也有主幹上的4.txt文件了,也就是說,合併主幹到分支上也是能夠的,以下圖所示: