SVN教程

SVN教程

SVN簡介

    SVN是Subversion的簡稱,是一個開放源代碼的版本控制系統,它採用了分支管理系統,它的設計目標就是取代CVS。說得簡單一點SVN就是用於多個人共同開發同一個項目,共用資源的目的。 

    Subversion(SVN) 是一個開源的版本控制系統, 也就是說 Subversion 管理着隨時間改變的數據。 這些數據放置在一箇中央資料檔案庫(repository) 中。 這個檔案庫很像一個普通的文件服務器, 不過它會記住每一次文件的變動。 這樣你就可以把檔案恢復到舊的版本, 或是瀏覽文件的變動歷史。   

SVN的一些概念

  • repository(源代碼庫):源代碼統一存放的地方

  • Checkout(提取):當你手上沒有源代碼的時候,你需要從repository checkout一份

  • Commit(提交):當你已經修改了代碼,你就需要Commit到repository

  • Update (更新):當你已經Checkout了一份源代碼, Update一下你就可以和Repository上的源代碼同步,你手上的代碼就會有最新的變更。

日常開發過程其實就是這樣的(第一次剛入職先從源代碼庫checkout源碼,已經Checkout並且已經工作了幾天後):Update(獲得最新的代碼) –>作出自己的修改並調試成功 –> Commit(大家就可以看到你的修改了) 。

如果兩個程序員同時修改了同一個文件呢, SVN可以合併這兩個程序員的改動,實際上SVN管理源代碼是以行爲單位的,就是說兩個程序員只要不是修改了同一行程序,SVN都會自動合併兩種修改。如果是同一行,SVN會提示文件Confict, 衝突,需要手動修改。

SVN的安裝

1.下載svn軟件,在瀏覽器中打開 http://subversion.apache.org/packages.html#windows

2.下載成功後安裝到指定目錄。然後把svn安裝目錄裏的bin目錄添加到環境變量path中。
這裏寫圖片描述

3.配置成功後,在命令行窗口輸入svnserve –version來測試一下是否安裝成功

這裏寫圖片描述

SVN創建版本庫

    使用命令 svnadmin create 路徑
    例如  svnadmin  create  d:\svnrepertory 


SVN的啓動

    啓動命令:svnserve -d -r 倉庫路徑
                     -d:後臺執行 
                     -r:版本庫的根目錄  

這裏寫圖片描述

由於-r 配置方式的不一樣,SVN啓動就可以有兩種不同的訪問方式,分爲多倉庫和單倉庫。

單倉庫(直接指定路徑到倉庫的根路徑),這種情況下,一個svnserve只能爲一個版本庫工作。
直接使用svn://localhost:3690/就能直接訪問。

這裏寫圖片描述

多倉庫,如果一個目錄下有多個倉庫,我們啓動時指定的是倉庫的父目錄,那麼表示啓動多倉庫。

多倉庫的訪問是 svn://localhost:3690/xxx 。 svn://localhost:3690/默認訪問的是倉庫的父目錄,後面需要加上指定倉庫的名稱。

服務啓動的一個小問題

服務器啓動成功後,控制檯頁面需要一直開啓,不能關閉,一關閉服務就停止。  

我們可以將啓動註冊成操作系統的服務,來方便我們開啓關閉 。  

註冊服務的命令  sc create svn(服務名稱) binpath= "D:\Subversion\bin\svnserve.exe(svn目錄) --service -r D:\svnrepertory(倉庫的目錄)" displayname= "SVN-Service" start= auto depend= Tcpip

刪除服務的命令  sc delete 服務名稱 

然後就可以直接執行開啓關閉服務等操作,也可以設置開機啓動。

這裏寫圖片描述

SVN的簡單操作

svn檢出操作

我們創建一個空目錄D:\\Demo\user1,用來模仿用戶。在這個目錄我們執行檢出操作。

這裏寫圖片描述

這個目錄會多出一個隱藏目錄 .svn。我們可以設置電腦的顯示隱藏文件查看。
.svn文件是subversion的版本控制信息文件,最好不要隨便修改。  

svn提交操作

我們在剛纔創建的目錄D:\\Demo\user1 創建一個文件demo1.txt ,然後提交 svn  commit demo1.txt。這時候會出現錯誤。

這裏寫圖片描述

該錯誤是因爲我們的文件並未添加到版本控制文件信息中,我們需要使用add子命令,添加到本地版本庫 
我們添加版本控制信息後再次提交,又出現錯誤。

這裏寫圖片描述

這個錯誤是因爲我們沒有設置編輯器來設置日誌信息。我們可以用-m參數來設置日誌信息。
然後提交,這時候又出現錯誤。

這裏寫圖片描述

這個錯誤因爲我們沒有權限的問題。後面我們會講權限的配置,這時候我們可以先設置爲匿名訪問。
我們設置倉庫的conf/svnserve.conf文件的anon-access屬性。 

anon-access: 控制非鑑權用戶訪問版本庫的權限,取值範圍爲"write""read""none"。 即"write"爲可讀可寫,"read"爲只讀,"none"表示無訪問權限。 缺省值:read

這裏寫圖片描述

然後進行提交,成功。

創建另一個目錄模擬用戶2 D:\\Demo\user2,我們先使用checkout指令 ,然後就能獲得到我們user1創建的文件, 

這裏寫圖片描述

然後用戶2對文件進行修改,提交。
然後用戶1對文件執行更新指令,就能獲得到用戶2修改後的版本 svn update  

這裏寫圖片描述

SVN的配置相關用戶和權限

進入倉庫的/conf目錄 修改默認配置文件配置,包括svnserve.conf、passwd、authz 配置相關用戶和權限。
1.先打開svnserve.conf文件,將裏面的 auth-access = write註釋去掉。這個選項是開啓權限認證 

    auth-access: 控制鑑權用戶訪問版本庫的權限。取值範圍爲"write""read""none"。 即"write"爲可讀可寫,"read"爲只讀,"none"表示無訪問權限。 缺省值:write 

    然後將password-db = passwd註釋去掉 ,這個是確定賬號配置文件的位置。
    將authz-db = authz註釋去掉 ,確定認證配置文件位置。

這裏寫圖片描述

2.然後打開passwd用戶名口令文件,由svnserve.conf的配置項password-db指定,缺省爲conf目錄中的passwd。該文件僅由一個[users]配置段組成。,配置我們的賬號密碼,一行一個賬號密碼。 

這裏寫圖片描述

3.權限配置文件由svnserve.conf的配置項authz-db指定,缺省爲conf目錄中的authz。該配置文件由一個[groups]配置段和若干個版本庫路徑權限段組成。 

配置組,給一組用戶配置權限,而不用每個都一一進行配置。 

這裏寫圖片描述

配置多倉庫權限,用[]指定倉庫名稱,例如[svn:/] ,如果[svn:/doc] 則表示對svn倉庫下的doc目錄進行權限配置 

        使用@組名=權限名  對組進行權限配置 
        使用賬號名=權限名 對單個賬號進行配置
        使用*表示對其他用戶進行配置 

這裏寫圖片描述

配置單倉庫權限
            由於單倉庫不用指定倉庫名  直接使用[/]指定單倉庫,其他配置都一樣

TortoiseSVN

我們上面的操作都是在控制檯上輸入命令進行操作,這個軟件是允許我們以圖形化界面的方式操作,免去很多繁瑣命令。

創建一個空目錄,右鍵通過TortoiseSVN創建一個倉庫。
然後用戶就可以通過右鍵進行checkout、updatecommitadd等操作 

這裏寫圖片描述

使用TortoiseSVN後,我們的文件上會多一些圖標,用來文件表示不同的狀態。

這裏寫圖片描述

SVN解決衝突

假設 A、B 兩個用戶都在版本號爲 100 的時候,更新了 kingtuns.txt 這個文件,A 用戶在修改完成之後提交 kingtuns.txt 到服務器, 這個時候提交成功,這個時候 kingtuns.txt 文件的版本號已經變成 101 了。同時B用戶在版本號爲 100 的 kingtuns.txt 文件上作修改, 修改完成之後提交到服務器時,由於不是在當前最新的 101 版本上作的修改,所以導致提交失敗。

1.我們讓A和B同時檢出一份文件。 

這裏寫圖片描述

2.用戶B對文件進行修改,然後提交 

這裏寫圖片描述

3.用戶A對文件進行修改,然後提交,這時候服務器上的文件已經更新過了 

這裏寫圖片描述

4.出現錯誤,提示文件已經更新,我們點擊ok,然後選擇update更新文件 

這裏寫圖片描述

這裏寫圖片描述

5.因爲實際上SVN管理源代碼是以行爲單位的,A和B用戶對同一行進行了修改,這時候就會出現衝突

這裏寫圖片描述

6.我們要提交的文件會多出來兩個文件,一個文件是原來有的內容,一個是B用戶修改的內容 

這裏寫圖片描述

7.我們右鍵要提交的文件,選擇編輯衝突 

這裏寫圖片描述

8.Theirs窗口爲服務器上當前最新版本
  Mine窗口爲本地修改後的版本
  Merged窗口爲合併後的文件內容顯示

  如果要使用服務器版本,在Theirs窗口選中差異內容,右鍵,選擇Use this text block(使用這段文本塊)。
  同理如果要使用本地版本,在協商後,在Mine窗口右鍵,選擇Use this text block(使用這段文本塊)

  然後點擊保存    ,然後點擊Mark  as  resolved解決衝突即可。      

這裏寫圖片描述

Eclipse SVN插件

我自己也寫了一些SVN插件使用的東西,可是效果不好,總覺得亂糟糟的一片。我發現了一篇很棒的關於SVN插件使用的教程。大家可以去這個大神這裏學習。

http://blog.csdn.net/v123411739/article/details/22512133

SVN目錄規範

創建倉庫以後,可以選擇創建目錄規範(create folder structure)。然後我們看倉庫瀏覽器,倉庫會多出來三個文件夾。

這裏寫圖片描述

這裏寫圖片描述

trunk:主線,用於存放程序的整個進度
branches:分支。
tags:標籤(版本),此目錄下的內容不能修改 


Branches 選項會給開發者創建出另外一條線路。當有人希望開發進程分開成兩條不同的線路時,這個選項會非常有用。
比如項目 demo 下有兩個小組,svn 下有一個 trunk 版。
由於客戶需求突然變化,導致項目需要做較大改動,此時項目組決定由小組 1 繼續完成原來正進行到一半的工作(某個模塊),小組 2 進行新需求的開發。
那麼此時,我們就可以爲小組2建立一個分支,分支其實就是 trunk 版(主幹線)的一個copy版,不過分支也是具有版本控制功能的,而且是和主幹線相互獨立的,當然,到最後我們可以通過(合併)功能,將分支合併到 trunk 上來,從而最後合併爲一個項目。 


版本管理系統支持 tag 選項,通過使用 tag 的概念,我們可以給某一個具體版本的代碼一個更加有意義的名字。
Tags 即標籤主要用於項目開發中的里程碑,比如開發到一定階段可以單獨一個版本作爲發佈等,它往往代表一個可以固定的完整的版本.例如xx系統1.0版本。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章