SVN版本控制服務

来源:http://www.cnblogs.com/xiaocheche/archive/2017/10/13/7660890.html
-Advertisement-
Play Games

1》Subversion版本控制簡介: Subversion(SVN)是一款自由開放的版本控制軟體,可以管理文件,文件夾以及記錄他們的修改狀況,常用來幫助我們管理軟體開發的源代碼或是公司手冊文檔。SVN通過將文檔導入至版本庫中進行管理,版本庫類似於文件伺服器,但比文件伺服器更強大的是,它可以記錄用戶 ...


1》Subversion版本控制簡介:

             Subversion(SVN)是一款自由開放的版本控制軟體,可以管理文件,文件夾以及記錄他們的修改狀況,常用來幫助我們管理軟體開發的源代碼或是公司手冊文檔。SVN通過將文檔導入至版本庫中進行管理,版本庫類似於文件伺服器,但比文件伺服器更強大的是,它可以記錄用戶每一次對文件或目錄的修改狀況,並提供還原數據至老版本的功能;版本控制對於軟體開發而言是至關重要的,現在的軟體開發一般作為項目進行,一個項目中會有很多人參加,那麼每個人手中都有自己的一份修改備份,最後誰的版本是最新的?有時一款軟體開發出來之後會有很多個版本,比如1.0版本,2.0版本,而且每個大版本下還有小版本號,1.1.1,2.1.1,等版本,SVN可以幫助我們很好地管理這些代碼;

2》SVN架構圖:

            從下圖可以看出,伺服器端保存著Subversion的版本庫,客戶端通過命令或圖形工具連接到伺服器,並建立本地“工作副本”,也就是從伺服器端將版本庫中的資料複製到客戶端本地,當然,客戶端主機可以將自己本地的版本更新至伺服器版本庫,而客戶端可以通過三種方式連接到伺服器取得版本庫中的數據:

                                                                         版本庫(Svn   Repository)---------------------->伺服器端

                                                            ========================================================

                                                                          Apache

                       mod_dav                                          SVN

                       mod_dav_suv

                                                     

                                                                               Internet

                     --------------------------------------------------------------------------------------------------

                                                                                  DAV             SVN               Local

                                                                                                 版本庫訪問       

                                                          ===========================================================

                                                                                    命令行或圖形工具------------------------------》客戶端

3》Subversion伺服器:

                    客戶端訪問伺服器時可以通過三種方式訪問:svnserve訪問,svnserve+ssh訪問,Apache間接訪問;

      svnserve是一個小巧,輕便的伺服器程式,客戶端通過使用SVN專用的協議進行訪問,其特點是簡單;由於svnserve本身並不提供數據加密通信的功能,所以,如果需要更加安全的連接,可以使用svnserve+ssh的方式與伺服器建立SSH隧道連接,再通過SSH調用svnserve程式,實現數據的安全加密傳輸;Apache通過mod_dav_svn模塊可以訪問版本庫,這樣客戶端可以通過訪問Apache取得版本庫資料,從而完成對數據的版本控制;

*************

                                   Apache+DAV                                                   svnserve                                                   svnserve+SSH

認證                     HTTP基本認證,LDAP,證書          支持MD5認證                                                      SSH認證

許可權           可對版本庫整體設置許可權,也可對        可對版本庫整體設置許可權,也可對               僅對版本庫 整體設置許可權

        指定目錄設置許可權                指定目錄設置許可權

加密      支持SSL加密               無                   支持SSH隧道加密  

日誌      完善的Apache日誌              無                   無   

速度      慢                    快                   快   

設置      相對複雜                 簡單                   相對簡單

4》SVN伺服器搭建:

         1>安裝SVN軟體:

      yum  -y  install  subversion

   2>搭建伺服器:

                        版本庫軟體安裝完成以後,我們首先要做的是創建一個版本庫,svnadmin工具是SVN軟體所提供的版本庫管理工具,該工具可以用來創建庫,備                 份庫,修訂版本等操作;其次我們還需要為版本庫建立一套有效的認證機制以增強版本資料庫的安全性,最後當伺服器端的所有設置均完成後,啟動                  伺服器端相應的服務進程即可;

                1)創建伺服器版本庫:

          利用svnadmin命令可以創建伺服器版本庫;

       描述:subversion版本庫管理工具,通過svnadmin help可以查看命令幫助;

       用法:svnadmin    命令   /版本庫路徑【選項】

                        命令:

          create            創建一個新的版本庫

          hotcopy   版本庫熱備

          lslocks     列印所有的鎖描述

       svnadmin實例:

                              svnadmin     create  /var/svn/project1

          svnadmin    hotcopy   /var/svn/project1        /var/svn/projet1_copy

          svnadmin    lslocks  /var/svn/project1

         ABC公司近期剛剛接到一個網站項目,由於項目開發是多人進行的,所以公司希望使用版本控制系統高效地管理項目代碼,項目代碼保存                            在/var/web_code目錄下,下麵我們將為該項目創建名為web_project的版本庫:

                              mkdir   /var/svn

          svnadmin   create   /var/svn/web_project

                             通過svnadmin命令已經創建了一個名為web_project的空版本庫,下麵我們將使用svn命令將項目代碼導入到版本庫中,import代表執行導入操                       作,將本地web_code目錄下的資料導入到剛剛創建的空版本庫web_project中,-m後面跟的是說明性的字元串,可以為任意字元:

                             svn  import  /var/web_code/  file:///var/svn/web_project/  -m  "Initial  DaTa"

         svn  list  file:///var/svn/web_project           列出版本庫中的資料列表

                                    

                      2)認證與授權

                                     使用SVN內置的認證機制可以有效地增強客戶端訪問版本庫的安全性,當客戶端訪問版本庫伺服器時,伺服器會根據版本庫目錄下的                                     conf/svnserve.conf文件中定義的認證與授權策略實現許可權的控制,下麵是該文件的核心配置說明:

                   

                                    在svnserve.conf中已經配置好了賬戶密碼文件,下麵分別看看passwd與authz文件的內容,預設該文件存放在版本庫的conf目錄下,在                           passwd文件中需要設置賬戶信息,在authz文件中需要設置訪問控制許可權;       

                             

                       

                             3)啟動svnserve服務:

                                    svnserve命令的描述和用法如下:

                                    描述:SVN伺服器程式

           用法:svnserve [選項]

                                    選項:

              -d                     以守護進程方式運行svnserve

             --listen-port=port     指定監聽的埠,預設監聽埠號為3690

            -r         為版本庫指定一個虛擬路徑,預設客戶端要指定絕對路徑訪問庫

                                   直接運行svnserve命令即可啟動SVN服務進程,但如果需要該服務作為後臺程式持續監聽客戶端訪問,可以使用-d選項使該程式以守護進                         程的方式啟動svnserve服務,SVN服務預設監聽埠為3690,如果防火牆處於開啟狀態,需要註意對防火牆的正確設置;svnserve運行後,會將                         所有版本庫發佈至網路(假設有多個版本庫);此時,客戶端需要指定絕對路徑訪問版本庫,如;svn://centos.example.com/var/svn/web_project,                       同時伺服器端如果需要在authz文件中為目錄設置許可權,路徑應該為[web_project:/]或[project2:/test],即這裡的[web_project:/]表示web_project是版                       本庫的根,[project2:/test]表示project2下的test目錄;   

                                    預設SVN會將伺服器電腦中所有的版本庫共用給網路用戶,但有時我們僅希望發佈其中一個版本庫時,就需要限制僅發佈web_project                         一個版本到網路中,這樣客戶端也可以使用相對路徑訪問版本庫,如:svn://centos.example.com/web_project(客戶端會訪問服務/var/svn/目錄下                     的web_project項目),同時,伺服器端如果需要在authz文件中為目錄設置許可權,路徑應該為[/]或[/test],即這裡的根(/)僅表示web_project版本                          庫,/test表示web_project下的test目錄;如果需要發佈個別版本庫給網路用戶,可以使用svnserve 命令的-r 選項,該選項後面接版本庫的路徑:

                                          svnserve  -d  -r  /var/svn

                                            

                       4)客戶端訪問:

                                  版本庫伺服器創建完成後,我們可以通過多種方式訪問SVN伺服器的版本庫,可以使用命令行或者圖形工具,也可以通過本地磁碟或網路                                協議訪問,但不管你使用哪種方式,都需要提供一個URL地址來定位版本庫的位置,每種URL的使用格式及含義示下:

                        file:///                   直接訪問本地磁碟上的版本庫(客戶端與伺服器端在一臺機器上)

         http://       配置Apache的WebDAV協議,通過網頁訪問版本庫

         https://        與http://相似,但使用了SSL進行數據加密

         svn://        通過svnserve定義的協議訪問版本庫

         svn+ssh://    與svn://相似,但使用了SSH封裝加密數據

          在客戶端訪問伺服器版本庫的眾多方法中,命令行的方式是高效,功能完善,無須安裝第三方軟體的一種簡單方式,SVN軟體為我們提供                           了一個名為svn的命令行程式; 

                              (1)svn命令:

              描述:subversion客戶端命令行工具

              用法:svn  命令  【選項】

              選項:

              --password         密碼

              --username    用戶名

              --revision(-r)  指定要檢查的特定版本

           命令:

               add                    添加文件,目錄或符合鏈接

               cat       輸出特定文件的內容

               checkout     URL[@REV] [PATH]

                                    從伺服器版本庫中複製一份副本到本地,URL定位版本庫,通過REV可以下載特定版本的數據,PATH為本地工作副本路徑:

                                                  commit                將本地工作副本修改後的內容發佈至版本中,簡寫為ci

               copy    SRC    DST       將工作副本中的一個文件或目錄複製到版本庫中

               delete    PATH               從本地工作副本中刪除一個項目

               delete    URL       從版本庫中刪除一個項目

               diff          對比兩個版本之間的差別

               import          提交一個路徑的副本至版本庫中

               info         顯示本地或遠程版本信息

 

        svn實例:

                                       svn   checkout   file:///var/svn/project1   mine

           svn    co   svn://192.168.0.254/project1  mine

           svn    commit  -m   "modified  foo.html"

             svn     commit  -m   "modified  foo.html"   /mine

             svn     delete   testfile

             svn      diff

           svn   import  -m  "New  project"   /etc    file:///var/svn/project

           svn  info

              svn  info   svn://172.16.0.118/var/svn/web_project

                                除了核心的svn命令,SVN軟體包還提供了一個用於對版本庫數據信息進行簡單查詢的工具,svnlook命令可以幫助用戶完成這些查詢工作;

                              (2)svnlook命令

                   描述:subversion檢查工具,通過svnlook  help可以查看命令幫助;

           用法:svnlook 命令     /版本庫路徑    【選項】

             選項:--revision(-r)   指定要檢查的特定版本

             命令:

             author                        顯示作者

             cat         顯示版本庫中的文件內容

               date        顯示時間標記

               log           顯示日誌消息

               tree          顯示版本庫資料樹

                                 svnlook實例:

                                           svnlook   author  /var/svn/web_project

                                           svnlook  author  -r  2  /var/svn/web_project     查看版本2的作者信息

            svnlook  cat    /var/svn/web_project  a.text   查看版本庫中a.text文件的內容

                                                    

                                        我們可以使用svn命令或圖形工具連接版本庫伺服器,下載版本數據到本地,通過圖形方式在本地電腦生成本地副本版本,圖形工具                            選的是windows平臺的TortoiseSVN軟體,安裝完成該軟體後,在桌面點擊滑鼠右鍵即可找到該工具,它是免費的基於GPL開發的開源自由軟                                件,它是subversion版本控制系統的一個非常優秀的客戶端程式,可以幫助我們高效地管理文件與目錄,我們可以在http://tortoisesvn.net/網站                              上找到下載鏈接,該軟體還提供了多語言軟體包(包括中文);

                           

5》svnserve+SSH伺服器搭建:

                  由於svnserve並不支持加密,所以對公司的數據安全危害比較大,基於SSH的svnserve使得客戶端可以通過SSH服務調用SVN服務程式,客戶端需要          使用ssh程式連接遠程伺服器的SSHD服務,通過SSH認證機制驗證賬戶身份後,再自動啟動svnserve服務,所以伺服器端不需要提前啟動SVN服務;在這            種模式下,svnserve.conf配置文件依然可以進行許可權控制,伺服器部署流程是啟動SSH服務,在伺服器上創建版本庫,向版本庫中導入數據,最後客戶端            使用命令或圖形方式訪問伺服器,具體操作步驟如下:                       

        1>伺服器端啟動SSHD伺服器:

                      service     sshd    start                                     

            chkconfig   sshd  on 

    2>伺服器端創建版本庫:

                      svnadmin    create   /var/svn/web_project2

       svn   import   /var/cofe2     file:///var/svn/web_project2  -m  "Web  code"

             3>客戶端訪問:

                    svn  co   svn+ssh://172.16.0.118/var/svn/web_project2   /web_code2

6》Apache+SVN伺服器搭建:

                 雖然前面兩種伺服器類型已經可以滿足大多數人的使用需求,但當客戶端沒有任何工具可以使用時,我們還可以創建基於Apache的SVN伺服器,這樣          客戶端只要有瀏覽器,就可以訪問版本庫伺服器,Apache是目前非常流行的Web伺服器軟體,它允許在幾乎所有的電腦平臺上運行,目前絕大多數系統          平臺都可以部署Apache  Web  Server,使用它訪問版本庫需要載入mod_dav與mod_dav_svn模塊,Apache需要通過這兩個模塊才可以管理subversion版            本庫,使用Apache發佈subversion版本庫的好處有:  

                 subversion可以使用Apache的多種認證方式;

     不需要創建系統賬戶;

     Apache提供了完善的日誌功能;

            可以通過TLS進行數據加密;

       HTTP以及HTTPS可以穿越企業防火牆;

       客戶端簡單地通過瀏覽器訪問版本庫;

               1>創建版本庫:

                    svnadmin  create   /var/svn/web_project3

          svn  import   /var/web_code3   file:///var/svn/web_project3   -m  "Term  3"  

              2>安裝Apache及相關模塊軟體:

                    yum  -y  install httpd

                    yum  -y  install   mod_dav_svn

              3>修改Apache配置:

                          為了讓Apache  Web  Server 可以讀取SVN版本庫中的數據,我們需要修改httpd針對SVN的配置文件subversion.conf,在該文件中至少確保                        mod_dav和mod_dav_svn兩個模塊會被載入,還要確保/etc/httpd/conf/httpd.conf文件中dav_module模塊也會被載入;另外為了滿足用戶對數據安全的                 需求,我們還可以利用httpd的認證模塊實現基於賬戶和密碼的訪問機制; 

                                    

 

                         chown   -R   apache.apache   /var/svn                           修改許可權

          chown  -R   -t   httpd_sys_content_t         /var/svn          僅當SELinux開啟時使用

          htpasswd  -c   /var/svn/.pass   jerry                                 創建賬戶文件,添加jerry用戶

               service   httpd start

                         chkconfig    httpd  on

                  4>客戶端訪問

                                   我們可以使用任何一款瀏覽器通過URL訪問版本庫數據,通過地址加埠和版本庫根目錄訪問;

7》常見問題:

             1>訪問版本庫路徑錯誤:

                        如果通過svnserve命令啟動服務時指定了發佈的具體版本庫,則客戶端訪問時就可以直接使用相對路徑訪問,如果伺服器端使用svnserve  -d  -r                      /var/svn  啟動服務後,客戶端依然使用svn  co  svn://172.16.0.118/var/svn/web_project  /mine  ,系統將提示:svn:No  repository  found,說明沒有                      找到該版本庫,正確的寫法是svn  co  svn://172.16.0.118/web_project  mine;

              2>每次想訪問版本庫時,進程就會掛起:

                         首先確保版本庫沒有被破壞,數據也沒有丟失,當進程直接訪問版本庫時,進程將通過Berkeley DB來實現,Berkeley DB包含日誌系統,也就是                   說,所有的操作在執行前都被記錄在日誌中;當進程崩潰時,遺留下文件鎖,並記錄了所有未完成操作的信息,從而導致所有試圖訪問資料庫的進程                   將因為要訪問文件鎖而被掛起,若想解除文件鎖,可以回滾到前一個正常狀態;

              3>subversion提示工作副本已過時:

                             這可能是提交失敗導致了你的工作副本被破壞,可以使用svn  revert回滾,svn  update更新來解決該問題;

               4>Windows  XP下,subversion伺服器有時會發佈一些錯誤數據:

                            如果你是在windows平臺下搭建subversion伺服器,可以嘗試通過安裝SPI補丁包解決該問題;

               5>Apache拒絕訪問:

                            通過瀏覽器訪問版本庫時提示:You  don't  have  permission  to access  /svn  on this  server;出現這種提示說明沒有許可權讀取相應的目錄,如                       用戶在這裡輸入:http://172.16.0.118/svn,就會得到這樣的提示,正確的輸入應為http://172.16.0.118/svn/web_project;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Mysql函數 select password(‘123456’); #加密密碼 select md5(‘123456’); #md5加密密碼(貌似mysql資料庫相同密碼每次加密後的md5字元串都是一樣) select AES_ENCRYPT('123456','key') ; #加密 selec ...
  • 參考文檔: 本文涉及postgresql的yum安裝,訪問配置及簡單使用。 一.驗證環境 1. 操作系統 CentOS-7-x86_64-Everything-1511 2. PostgresSQL版本 PostgreSQL 9.6.3:https://www.postgresql.org/down ...
  • case when 對錶進行條件分組 case簡單函數 case age when then select name , sex , age , ( case age /*when 條件成立顯示then中內容 then 成立是顯示 else 不成立顯示 end*/ when age = 18 the ...
  • 1、匯流排的基本概念 1.為什麼要用匯流排? 馮諾依曼將電腦分為五部分:運算器、存儲器、控制器、輸入設備和輸出設備。要將這些設備連接起來需要較多的通路。 2.匯流排 匯流排式連接各個部件的信息傳輸線,是各個部件共用的傳輸介質。 3.匯流排上信息的傳送 串列:一次傳輸一位信號。 並行:傳輸距離較短, 4.匯流排 ...
  • 相信有很多鞋童和我一個樣是一枚Linux碼農(我現在還是嵌入式方向). 做Linux開發勢必需要一個Linux環境, 大多數開發者會首先選擇一個Linux發行版, 其中Ubuntu LTS版本應該是選取最多的一個了, 原因也很簡單, 該發行版簡單易用的同時足夠穩定和普及. 選擇完發行版就要選擇怎麼安 ...
  • Shell是系統的用戶界面,提供了用戶與內核進行交互操作的一種介面。它接收用戶輸入的命令並把它送入內核去執行。實際上Shell是一個命令解釋器,它解釋由用戶輸入的命令並且把它們送到內核。 1 、Shell中的特殊符號 1.1 $ 美元符號。用來表示變數的值。如變數NAME的值為Mike,則使用$NA ...
  • 下圖是從測試拷64位windbg抓的dump文件拖到32位windbg查看線程堆棧信息的效果。 那麼我們載入一下wow64exts模塊,因為需要這個模塊幫助把64位的dump,轉換成32位的dump。命令就是.load wow64exts 再次輸入!sw 。這樣就可以像在32位模式下分析dump一樣 ...
  • 1.查看系統是否已經安裝git git --version 2.CentOS7 yum 安裝git yum install git ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...