SVN 學習

SVN

SVN是subversion的縮寫,是一個開放源代碼的版本控制系統,通過采用分支管理系統的高效管理,簡而言之就是用于多個人共同開發同一個項目,實現共享資源,實現最終集中式的管理。

SVN屬于C/S結構軟件,分為客戶端和服務器端

服務端軟件:VisualSVN

網址:https://www.visualsvn.com/

客戶端軟件:Tortoisesvn

網址:https://tortoisesvn.net/downloads.html

指令介紹

Checkout(檢出)

第一次與svn服務器聯系,并把項目更新到本地

  1. 鏈接到svn服務器端
  2. 更新服務器端數據到本地

注意Checkout只在第一次時才使用,其余若要更新數據則使用Update

Update(更新)

更新svn服務器代碼到本地

Commit(提交/上傳)

把代碼上傳到服務器

  • 提交本地數據到服務器端

具體工作流程

1574946102264.png

軟件安裝

服務端軟件安裝(VisualSVN)

配置8443端口號、倉庫等設置后進行安裝

SVN服務端配置

  1. 創建一個項目

    1. 首先在SVN服務端創建一個公有目錄WebApp作為項目目錄

    2. 在WebApp目錄下創建Shop文件夾,作為Shop(版本倉庫)

    3. 創建版本倉庫,基本語法(DOS環境):

      svnadmin create 項目名 文件夾路徑
      

      Shop 倉庫目錄結構

      1574954547749.png
  1. 進行服務端監管

    客戶端輸入svn://localhost(或ip地址)可以訪問到相關數據倉庫(如示例的Shop倉庫)

    要想要客戶端能訪問到數據倉庫,需要服務端啟用該倉庫的監管服務

    svnserve -d -r 服務端的版本倉庫目錄
    

    -d 在后臺運行

    -r 監管目錄

  2. 權限控制

    默認情況下,svn服務器是不允許匿名用戶上傳文件到服務器端的,要更改項目的相關配置文件。

    anon-access = write
    # auth-access = write
    

    讓auth-access屬性值為write,使該倉庫可讀可寫

SVN客戶端軟件安裝與使用

安裝完成后

  1. 在客戶端目標文件夾下右擊checkout
  2. 在彈出的窗口中輸入svn://服務器地址(也可以在URL of repository右面的目錄中檢查),點擊OK
  3. 如果當前文件夾下出現.svn/的隱藏文件夾,說明客戶端已經和服務器端建立起了聯系

項目經理創建項目

在有文件需要提交時,在當前文件夾下右擊選擇SVN Commit

  1. 進入窗口后填寫備注信息,選擇需要上傳的文件,然后點OK提交
1575042984737.png
  1. 出現以下界面,說明提交成功

    1575043487030.png

程序員編寫項目

以上工作大部分是由項目經理完成的,程序員需要完成另外的操作

  1. 在文件夾下右擊進行檢出操作
1575084453192.png
  1. 如果有新文件要提交,直接右擊Commit(需要填寫備注信息和勾選文件)

    一般以上指令是在模塊開發完畢后上傳

項目經理檢查進度

  1. 需要使用Update指令

    一般直接右擊Update直接更新文件,系統會直接更新到最新版本

其他使用詳解

文件圖標

右擊---》 TortoiseSVN--》setting--》 Icon Overlays--》 Icon Set

  1. 1575085612459.png

常規圖標:當客戶端文件與服務器端文件完全同步

  1. 1575085684229.png

沖突突變:當客戶端提交的文件與服務器端數據有沖突

  1. 1575085853062.png

刪除圖標:當服務器端數據已刪除

  1. 1575085853062.png

增加圖標:當我們編寫的文件已添加到提交隊列

  1. 1575086033381.png

無版本控制圖標:當我們編寫的文件沒有添加到上傳隊列

  1. 1575086122515.png

修改圖標:當客戶端文件有修改但未提交

  1. 1575086175637.png

只讀圖標:當客戶端文件以只讀形式存在時

  1. 1575086222373.png

鎖定圖標:當服務器端數據已鎖定

  1. 1575086279764.png

忽略圖標:客戶端文件已忽略,不需要進行上傳

忽略文件

希望有一些文件不上傳到svn服務器,應該將該文件或該類型的文件添加至忽略列表

右擊文件--》 TortoiseSVN--》 Add to ignore list--》 選擇忽略的方式(忽略某個文件或某個類型的文件)

版本管理

版本回退

文件夾空白處右擊TortoiseSVN--》 Update to revision...--》

1575087914609.png

一般根據日志進行版本回退

1575088018164.png

解決版本沖突

在實際項目開發中,如果兩個人同時修改某個文件就會產生版本沖突問題

1575099316038.png

解決方法

  1. 合理分配項目開發時間

  2. 合理分配項目開發模塊

  3. 通過svn解決版本沖突問題

    1. 更新服務器端數據到本地(出現沖突后)

      1575099451572.png
  直接Update

  沖突文件會出現其他的副本文件
1575099541187.png

? hello.java:整合后的hello.java文件

? hello.java.mine:沖突當事人修改后的hello.java文件

? hello.java.rx:代表x版本的文件,版本號低的一般代表起始狀態,版本號高的是其他人修改文件后的版本

  1. 刪除除hello.java以外的其他三個文件
  2. 修改整合hello.java文件
  3. 重新提交解決沖突

配置多倉庫與權限控制

配置多倉庫

在實際項目開發中,我們可能會同時開發多個項目,那么我們如何進行多項目監管呢?

如果通過svnserve進行倉庫監管,但是監管指令只能同時監管某一個文件夾,而不能同時監管多個倉庫。

答:可以通過監管WebApp總目錄來達到監管所有倉庫的目的

svnserve -d(后臺運行) -r(監管目錄) WebApp(項目總目錄的路徑)

此時svn://localhost或ip地址 是來訪問WebApp目錄的,如果需要訪問里面的Shop項目或者Wechat項目

Shop項目:svn://localhost/Shop

Webchat項目:svn://localhost/Wechat

權限控制

如果要使用權限控制功能,要有一個前提:必須首先開啟權限功能,在每一個倉庫中都有一個conf文件夾,里面有四個文件,其中

authz文件為授權文件,告訴哪些用戶具有哪些權限

passwd文件為認證文件,標識當前svn系統中某個倉庫具有哪些用戶以及相應的密碼

默認情況下,以上兩個文件都是禁用的,如需使用,首先要在svnserve.conf配置文件上開啟以上兩個文件

開啟步驟:

  1. 注釋匿名用戶的可讀可寫權限

    給anon-access加上注釋

    ### users have read and write access to the repository.
    # anon-access = write
    # auth-access = write
    
  2. 開啟認證文件與授權文件

    取消兩個注釋

    password-db = passwd  #一般在27行
    
    authz-db = authz  #一般在36行
    
  3. 編寫認證文件定義相關用戶名與密碼

    打開passwd文件,等號左邊為用戶名,右邊為密碼

    [users]
    # harry = harryssecret
    # sally = sallyssecret
    
    admin = admin888
    itcast = 123456
    
  4. 編寫授權文件

    打開authz文件

    groups為用戶分組

    [aliases]
    # joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
    
    [groups]
    # harry_and_sally = harry,sally
    # harry_sally_and_joe = harry,sally,&joe
    # 組名 = 組員(組員間用“,”隔開)
    admin = admin
    itcast = itcast
    
    # [/foo/bar]
    # harry = rw
    # &joe = r
    # * =
    
    # [repository:/baz/fuz]
    # @harry_and_sally = rw
    # * = r
    [Shop:/] #Shop為項目文件夾名
    @admin = rw #r為可讀,w為可寫
    @itcast = r
    * = r #代表匿名用戶
    
  5. 測試

    如果* = r時,所有用戶都能Checkout到項目,但當要提交修改時,會出現用戶驗證

    1575101901427.png

此時可以輸入管理員賬號admin admin888,或者普通員工賬號itcast 123456

SVN服務的配置與管理

  1. 配置服務的自動啟動服務(開機自啟)

    Window系統

    創建系統服務

    sc create 服務名稱 binpath= "服務的可執行文件 --service -r WebApp的路徑"start= auto(binpath=和start=后面都要帶上一個空格)

    sc create SVNService binpath= "svnservice安裝目錄\bin\svnserve.exe --service -r WebApp的路徑" start= auto
    
    
  2. 配置批處理文件

    Window系統(SVNService為服務名稱)

    1. 創建stop.bat文件

      net stop SVNService
      
      
    2. start.bat文件

      net start SVNService
      
      
    3. delete.bat文件

      sc delete SVNService
      
      

實際開發模擬

1575103226077.png

通過鉤子程序,讓svn服務器上的程序同步到web服務器

鉤子程序

所謂鉤子就是與一些版本庫事件觸發的程序,例如新修訂版本的創建,或是未版本化屬性的修改

默認情況下,鉤子的子目錄(版本倉庫/hooks)中包含各種版本庫鉤子的模板

1575103491707.png

post-commit.tmpl:事務完成后所觸發的鉤子程序

鉤子程序默認情況可以采用批處理指令或Shell指令來進行編寫

通過批處理指令編寫鉤子程序

  1. 指定svn服務器工作目錄

    SET SVN="SVNService的安裝目錄\bin\svn.exe"
    
    
  2. 指定web服務器工作目錄

    SET DIR="服務器端目錄"
    
    
  3. 通過update指令實時更新數據到DIR目錄中

    SVN update %DIR%
    
    
  4. 編寫post-commit.bat文件(文件放在hooks文件夾內)

    SET SVN="SVNService的安裝目錄\bin\svn.exe"
    SET DIR="服務器端目錄"
    SVN update %DIR%
    
    
  5. 使用步驟

    1. 在服務器目錄下通過svn服務更新項目
    2. 有人更新文件到svn服務器上,服務器上的文件也會更新
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容

  • SVN學習筆記 SVN背景知識 SVN,全稱Subversion, 是一個開放源碼的集中式版本控制系統,這里需要注...
    顏洛濱閱讀 898評論 0 3
  • 前言 為了工作內容學習SVN。SVN是一個C/S類型的版本管理,對服務器依賴很大,大部分操作是和SVN服務器有關的...
    linanwx閱讀 297評論 0 0
  • 在一個項目中有多個成員共同開發,其中各自所負責的模塊并不相同,所以svn給其分配的權限也要不同,以防止zhangs...
    小沙鷹168閱讀 7,024評論 0 1
  • 上一節已經把svn安裝完成,下來就用命令行做一些簡單的操作。 1、當svn安裝完成后,svn管理人員會在svn的r...
    小沙鷹168閱讀 570評論 0 0
  • 在上一節中已經實現了用命令行對svn做一些基本的操作,但是在平時的使用中,一般是不直接用命令行進行操作的。而是要使...
    小沙鷹168閱讀 1,033評論 0 1