個人上一篇隨筆講了怎麼使用Subversion客戶端去鏈接服務器,因爲服務器是別人的,咱們只能體驗到有限的功能。要探索版本控制的方方面面,非得本身創建Subversion服務器不可。在這一篇中,我將構建一個本身的源代碼倉庫。java
首先是規劃,我以爲應該從如下幾個方面來考慮問題:安全
一、源代碼倉庫放在什麼地方?服務器
二、怎麼將版本庫發佈到網絡上?網絡
三、設置什麼樣的認證和受權策略?svn
先來看第一個問題。我認爲,一個開發團隊應該使用一臺單獨的服務器來存放版本庫,而這臺服務器的操做系統,我推薦是Unix/Linux。緣由很簡單,由於大多數的Unix/Linux系統都自帶有Subversion軟件,並且Unix/Linux系統都有很好的安全性。工具
我使用的是紅旗桌面6.0,才推出沒多久,號稱內核和全部自帶的軟件包都是最新的,我推薦你們使用。固然,這個系統也不是天衣無縫的,畢竟國產的東西常遭詬病,我選擇它的緣由主要仍是字體比較清晰。紅旗桌面6.0自帶的Subversion軟件爲1.4.2。先給你們看一個截圖:post
在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端口已經開放了,以下圖:
這時,就能夠在客戶機上使用svn://192.168.1.3/jproject來鏈接Subversion服務器了。
最後看第三個問題。svnserve服務器運行後,當用戶請求訪問某個版本庫的時候,svnserve會先讀取版本庫目錄下的conf目錄中的svnserve.conf文件,而後根據這個文件中的設置來決定認證和受權策略。
個人認證和受權策略很簡單,認證就使用簡單的用戶名和密碼機制,受權策略爲通過認證的用戶能夠讀些版本庫、匿名用戶只能讀不能寫。所以,這個配置文件很簡單,以下:
在這個配置文件中,設置了保存用戶名和密碼的文件爲passwd,再編輯該文件,添加兩個用戶,以下圖:
OK,如今svnserve的設置已經基本完成,下面使用Eclipse來測試一下。在Eclipse中創建一個HelloWorld項目,在項目上點右鍵,在彈出菜單中選擇小組-〉共享項目,而後依照提示一步一步進行便可,以下列圖片所示:
點擊肯定,HelloWorld項目就所有被提交到Subversion版本庫中了,從下圖中能夠看出,加入到版本庫中的項目前面的圖標都有所改變,只要鼠標懸停到文件上面,就會顯示更改的時間和用戶,真的是很是方便。
最後要說的是,svnserve提供的受權機制比較簡單,對於一個用戶,要麼可以訪問整個版本庫,要麼就什麼也不能訪問,若是要指定某個用戶只能訪問某些文件夾而不能訪問另外的文件夾是不可能的。要想實現這樣的功能,只有使用httpd。這大概也是httpd做爲Subversion服務器主流的緣由之一吧。