京山游俠

          專注技術,拒絕扯淡
          posts - 50, comments - 868, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          我的上一篇隨筆講了怎么使用Subversion客戶端去連接服務器,由于服務器是別人的,我們只能體驗到有限的功能。要探索版本控制的方方面面,非得自己建立Subversion服務器不可。在這一篇中,我將構建一個自己的源代碼倉庫。

          首先是規劃,我覺得應該從以下幾個方面來考慮問題:

          1、源代碼倉庫放在什么地方?

          2、怎么將版本庫發布到網絡上?

          3、設置什么樣的認證和授權策略?

          先來看第一個問題。我認為,一個開發團隊應該使用一臺單獨的服務器來存放版本庫,而這臺服務器的操作系統,我推薦是Unix/Linux。原因很簡單,因為大多數的Unix/Linux系統都自帶有Subversion軟件,而且Unix/Linux系統都有很好的安全性。

          我使用的是紅旗桌面6.0,才推出沒多久,號稱內核和所有自帶的軟件包都是最新的,我推薦大家使用。當然,這個系統也不是完美無缺的,畢竟國產的東西常遭詬病,我選擇它的原因主要還是字體比較清晰。紅旗桌面6.0自帶的Subversion軟件為1.4.2。先給大家看一個截圖:
          01.PNG

          在Linux系統中,我建立了一個目錄/var/svnroot作為版本庫的存放目錄,然后使用svnadmin命令來創建了一個版本庫。svnadmin和svnlook都是服務器端的工具,他們可以直接操作版本庫服務器上的目錄和文件,而不需要Subversion服務器運行。進入到剛才創建的版本庫目錄/var/svnroot/jproject中,可以看到里面的目錄結構,如上圖所示。其中的conf目錄為存放配置文件的地方,等會設置認證和授權策略的時候會用到。

          再來看第二個問題。只有把版本庫發布到網絡上,才能夠讓別的機器訪問得到,毫無疑問需要使用一個服務器端的守護程序。在網上找一下資料,發現大部分講Subversion服務器配置的文章都是使用的httpd服務器搭配mod_dav和mod_dav_svn模塊來提供Subversion服務,我想可能是因為http協議更適合于廣域網的環境吧。使用httpd配置比較復雜,如果只是在局域網內做開發,使用Subversion自帶的svnserve也是不錯的選擇。

          運行svnserve命令,帶-d選項即可以作為一個單獨的守護進程運行,-r選項可以指定發布哪個目錄下的版本庫。一旦服務器運行,就在端口3690進行監聽。使用telnet可以測試到3690端口已經開放了,如下圖:
          02.PNG

          這時,就可以在客戶機上使用svn://192.168.1.3/jproject來連接Subversion服務器了。

          最后看第三個問題。svnserve服務器運行后,當用戶請求訪問某個版本庫的時候,svnserve會先讀取版本庫目錄下的conf目錄中的svnserve.conf文件,然后根據這個文件中的設置來決定認證和授權策略。

          我的認證和授權策略很簡單,認證就使用簡單的用戶名和密碼機制,授權策略為經過認證的用戶可以讀些版本庫、匿名用戶只能讀不能寫。因此,這個配置文件很簡單,如下:
          03.png

          在這個配置文件中,設置了保存用戶名和密碼的文件為passwd,再編輯該文件,添加兩個用戶,如下圖:
          04.png


          OK,現在svnserve的設置已經基本完成,下面使用Eclipse來測試一下。在Eclipse中建立一個HelloWorld項目,在項目上點右鍵,在彈出菜單中選擇小組-〉共享項目,然后依照提示一步一步進行即可,如下列圖片所示:
          05.png

          06.PNG

          07.PNG

          08.PNG

          09.PNG

          10.PNG

          11.PNG

          12.PNG

          點擊確定,HelloWorld項目就全部被提交到Subversion版本庫中了,從下圖中可以看出,加入到版本庫中的項目前面的圖標都有所改變,只要鼠標懸停到文件上面,就會顯示更改的時間和用戶,真的是非常方便。
          13.png

          最后要說的是,svnserve提供的授權機制比較簡單,對于一個用戶,要么能夠訪問整個版本庫,要么就什么也不能訪問,如果要指定某個用戶只能訪問某些文件夾而不能訪問另外的文件夾是不可能的。要想實現這樣的功能,只有使用httpd。這大概也是httpd作為Subversion服務器主流的原因之一吧。


          評論

          # re: 使用Subversion進行源代碼管理(二):創建和發布版本庫  回復  更多評論   

          2007-10-23 19:17 by tangfl
          最新的 svn 已經可以做到目錄級別的權限控制了,但還是做不到單個文件級別。
          寫博客之前,尤其是寫這樣的教程類的文章前,應該自己先確認一下的。

          # re: 使用Subversion進行源代碼管理(二):創建和發布版本庫  回復  更多評論   

          2007-10-25 14:30 by 海邊沫沫
          @tangfl
          多謝指正。

          Subversion 從1.3版之后,svnserve也提供了目錄級別的訪問控制,其配置方法為先編輯conf/svnserve.conf文件,添加一行:
          authz-db = authz

          這一行的意思是指將目錄級別訪問控制的配置放在了authz文件中,authz文件的配置格式如下:

          # re: 使用Subversion進行源代碼管理(二):創建和發布版本庫  回復  更多評論   

          2007-11-01 17:58 by 海邊沫沫
          具體的配置方法,這里有一篇文章
          http://www.aygfsteel.com/apple0668/archive/2007/10/30/157060.html

          # 如何使得SVN支持HTTP協議  回復  更多評論   

          2008-02-14 11:24 by brofe
          我現在在體驗SVN實現版本管理。

          只弄好了svnserve的服務,只支持svn的協議訪問。

          而我想在Tomcat中部署svnwebclient,但是svnserve是不支持的http協議的。

          所以還請教教我這個新手,本人感激不盡。

          可將幫助發于我的Email: brofe@163.com

          # re: 使用Subversion進行源代碼管理(二):創建和發布版本庫  回復  更多評論   

          2008-02-14 17:02 by 海邊沫沫
          @brofe

          通過httpd服務器搭載SVN模塊,就可以支持HTTP協議訪問了。
          你到網上一搜,到處都是的。

          # re: 使用Subversion進行源代碼管理(二):創建和發布版本庫  回復  更多評論   

          2008-03-11 02:47 by husw
          夠詳細,第一次這么系統的認識SVN

          # re: 使用Subversion進行源代碼管理(二):創建和發布版本庫  回復  更多評論   

          2008-03-11 02:47 by husw
          非常感謝!
          主站蜘蛛池模板: 屏南县| 双牌县| 静安区| 葵青区| 板桥市| 灵石县| 临朐县| 浦北县| 凤庆县| 隆安县| 华宁县| 五华县| 永新县| 阿拉善左旗| 重庆市| 神木县| 郯城县| 依兰县| 平罗县| 长宁县| 蕲春县| 淳化县| 龙江县| 湘乡市| 呼伦贝尔市| 寻甸| 翼城县| 拉孜县| 桓仁| 石景山区| 泊头市| 乐安县| 额敏县| 卫辉市| 沐川县| 璧山县| 松潘县| 左云县| 八宿县| 阆中市| 法库县|