使用Subversion進行源代碼管理(二):創(chuàng)建和發(fā)布版本庫
Posted on 2007-10-23 18:34 京山游俠 閱讀(7743) 評論(7) 編輯 收藏 所屬分類: SVN與源代碼管理我的上一篇隨筆講了怎么使用Subversion客戶端去連接服務(wù)器,由于服務(wù)器是別人的,我們只能體驗到有限的功能。要探索版本控制的方方面面,非得自己建立Subversion服務(wù)器不可。在這一篇中,我將構(gòu)建一個自己的源代碼倉庫。
首先是規(guī)劃,我覺得應(yīng)該從以下幾個方面來考慮問題:
1、源代碼倉庫放在什么地方?
2、怎么將版本庫發(fā)布到網(wǎng)絡(luò)上?
3、設(shè)置什么樣的認證和授權(quán)策略?
先來看第一個問題。我認為,一個開發(fā)團隊應(yīng)該使用一臺單獨的服務(wù)器來存放版本庫,而這臺服務(wù)器的操作系統(tǒng),我推薦是Unix/Linux。原因很簡單,因為大多數(shù)的Unix/Linux系統(tǒng)都自帶有Subversion軟件,而且Unix/Linux系統(tǒng)都有很好的安全性。
我使用的是紅旗桌面6.0,才推出沒多久,號稱內(nèi)核和所有自帶的軟件包都是最新的,我推薦大家使用。當然,這個系統(tǒng)也不是完美無缺的,畢竟國產(chǎn)的東西常遭詬病,我選擇它的原因主要還是字體比較清晰。紅旗桌面6.0自帶的Subversion軟件為1.4.2。先給大家看一個截圖:
在Linux系統(tǒng)中,我建立了一個目錄/var/svnroot作為版本庫的存放目錄,然后使用svnadmin命令來創(chuàng)建了一個版本庫。svnadmin和svnlook都是服務(wù)器端的工具,他們可以直接操作版本庫服務(wù)器上的目錄和文件,而不需要Subversion服務(wù)器運行。進入到剛才創(chuàng)建的版本庫目錄/var/svnroot/jproject中,可以看到里面的目錄結(jié)構(gòu),如上圖所示。其中的conf目錄為存放配置文件的地方,等會設(shè)置認證和授權(quán)策略的時候會用到。
再來看第二個問題。只有把版本庫發(fā)布到網(wǎng)絡(luò)上,才能夠讓別的機器訪問得到,毫無疑問需要使用一個服務(wù)器端的守護程序。在網(wǎng)上找一下資料,發(fā)現(xiàn)大部分講Subversion服務(wù)器配置的文章都是使用的httpd服務(wù)器搭配mod_dav和mod_dav_svn模塊來提供Subversion服務(wù),我想可能是因為http協(xié)議更適合于廣域網(wǎng)的環(huán)境吧。使用httpd配置比較復(fù)雜,如果只是在局域網(wǎng)內(nèi)做開發(fā),使用Subversion自帶的svnserve也是不錯的選擇。
運行svnserve命令,帶-d選項即可以作為一個單獨的守護進程運行,-r選項可以指定發(fā)布哪個目錄下的版本庫。一旦服務(wù)器運行,就在端口3690進行監(jiān)聽。使用telnet可以測試到3690端口已經(jīng)開放了,如下圖:
這時,就可以在客戶機上使用svn://192.168.1.3/jproject來連接Subversion服務(wù)器了。
最后看第三個問題。svnserve服務(wù)器運行后,當用戶請求訪問某個版本庫的時候,svnserve會先讀取版本庫目錄下的conf目錄中的svnserve.conf文件,然后根據(jù)這個文件中的設(shè)置來決定認證和授權(quán)策略。
我的認證和授權(quán)策略很簡單,認證就使用簡單的用戶名和密碼機制,授權(quán)策略為經(jīng)過認證的用戶可以讀些版本庫、匿名用戶只能讀不能寫。因此,這個配置文件很簡單,如下:
在這個配置文件中,設(shè)置了保存用戶名和密碼的文件為passwd,再編輯該文件,添加兩個用戶,如下圖:
OK,現(xiàn)在svnserve的設(shè)置已經(jīng)基本完成,下面使用Eclipse來測試一下。在Eclipse中建立一個HelloWorld項目,在項目上點右鍵,在彈出菜單中選擇小組-〉共享項目,然后依照提示一步一步進行即可,如下列圖片所示:
點擊確定,HelloWorld項目就全部被提交到Subversion版本庫中了,從下圖中可以看出,加入到版本庫中的項目前面的圖標都有所改變,只要鼠標懸停到文件上面,就會顯示更改的時間和用戶,真的是非常方便。
最后要說的是,svnserve提供的授權(quán)機制比較簡單,對于一個用戶,要么能夠訪問整個版本庫,要么就什么也不能訪問,如果要指定某個用戶只能訪問某些文件夾而不能訪問另外的文件夾是不可能的。要想實現(xiàn)這樣的功能,只有使用httpd。這大概也是httpd作為Subversion服務(wù)器主流的原因之一吧。