Svn多項目管理

Subversion的目錄結構是很自由的,全部的規劃都必須是你本身規定,考慮一個 subversion倉庫的目錄樹,你能夠把任何一個目錄認定爲一個項目,你能夠只checkout這個目錄下的全部文件進行編碼,跟CVS不一樣,CVS 顯式指定一個個module。因此你能夠在一個倉庫內保存 多個項目,也能夠一個倉庫保存一個項目而使用多個倉庫。我我的比較喜歡第二種,由於 Subversion的每次commit都會致使整個倉庫 版本號增長一個,會使得 多個項目的 版本號出現斷層。並且若是 多個項目參與人不一樣,就必須使用apache2進行細粒度的權限控制,不是太方便。一個倉庫一個項目,顯得更優雅一些。html

如下是我研究出的倉庫規劃。web

在server端,新建一個目錄用來存放全部的倉庫。好比c:\svnrepos。而後在這個目錄下創建每一個項目獨立apache

svnadmin create "c:\svnrepos\rolex"
svnadmin create "c:\svnrepos\omega"

使用 svnserve -d -r "c:\svnrepos" 啓動。這樣你的項目的url是:
svn://IP/rolex
svn://IP/omega瀏覽器

在 客戶端新建一個目錄,做爲import的內容,好比c:\svnimport\rolex,而後在裏面創建branches,tags,trunk子目 錄,把你須要源代碼管理的項目放入trunk目錄,注意刪除垃圾文件。在c:\svnimport\rolex上點擊Import...,選擇url爲 svn://IP/rolex,導入。你可使用倉庫瀏覽器查看導入的效果。

須要工做時,新建一個目錄好比c:\svnclient\rolex\trunk,而後在trunk上checkout出svn://IP/rolex/trunk上的內容。svn

 

SVN Checkout 不包括源文件夾根目錄,好比我要checkout   trunk/ 下面的全部文件,可是不包括trunk 文件夾咱們能夠在svn文件夾後面打個空格,在加個「.」就好了工具

eg: 「svn co http://192.168.1.10/svn/project/trunk/「 改成 」svn co http://192.168.1.10/svn/project/trunk/ .「post

利用SVN的POST-COMMIT鉤子自動部署代碼編碼

建立一個post-commit的文件 (上傳到SVN項目的HOOKS目錄),內容爲url

#!/bin/shspa

export LANG=zh_CN.UTF-8 

REPOS="$1"

REV="$2"

/usr/bin/svn  update  --username   yujianlong  –password  yujianlong /www/web/dakang_test_com/public_html/

設置該文件的權限,須要有apache的權限才能夠,設爲777就好了也不用管用戶組了。

而後將項目checkout到apache web目錄下

Ok了,下次commit以後就會觸發post-commit文件了 執行update操做

 

3、權限配置

進入test目錄以後,你會看到裏邊有個「conf」文件夾,進入conf文件夾,ls一下,你會看到有三個文件authz、passwd、svnserve.conf三個配置文件,其中authz用來配置用戶訪問權限的,passwd用來配置用戶及密碼,svnserve.conf是對整個svnserve的進程進行配置的。

使用nano或者vi工具打開svnserve.conf,找到「# password-db = passwd」,這一句是指定當前庫所對應的用戶配置文件的,咱們須要把最前邊的「#」和空格刪掉;

找到「# anon-access = none」

「# auth-access = write」這兩句,第一句是用來控制匿名訪問的,咱們直接給它設置成none就行了,第二句用來控制通過驗證容許訪問庫的用戶的權限,這裏咱們設置成write就能夠,固然,也要把前邊的「#」和空格都刪掉;

找到「# authz-db = authz」,這一句是用來指定當前庫對應的用戶權限配置文件的,咱們把最前邊的「#」和空格都刪掉,這樣庫在運行的時候要根據authz這個配置文件去匹配用戶權限。

到這裏,咱們的全部配置文件均可以起到他們應有的做用了,接下來就是對細節的具體配置:

對於passwd:

很簡單,在最後直接添加用戶就好,格式爲:「用戶名 = 密碼」,例如:「test_user = 12345」

對於authz:

主要是分爲兩類配置:[groups]類配置、以[repo:/]開頭的配置。

1.[groups]的配置很容易理解,就是羣組。格式也比較簡單,即「group_name = user1,user2,user3」,若是有多個用戶,能夠直接經過「,」的方式拼接就能夠了,例如:

 

[groups]

 

# 經理

g_manager = michael

# 北京辦人員

g_beijing = scofield

# 上海辦人員

g_shanghai = lincon

# 總部通常員工

g_headquarters = rory, linda

2.以[repo:/]開頭的配置,上邊的[gourps]配置是用來劃分用戶分組的,那麼以[repo:/]開頭的配置就是用來具體的劃分用戶讀寫權限的了,其中repo是你的庫的名字,即上邊咱們經過「svnadmin create /home/user/svn/test」命令所建立的庫「test」,下邊咱們直接用例子來講明它的使用方法:

對項目根目錄作限制,該目錄只容許經理才能修改,其餘人都只能擁有讀的權限:

[test:/]

@g_manager = rw

* = r

「[test:/]」 表示這個目錄結構的相對根節點,或者說是 test 項目的根目錄。這裏的 「@」 表示接下來的是一個組名,不是用戶名。由於目前 g_manager 組裏面只有一個 michael,你固然也能夠將 「@g_manager = rw」 這一行替換成 「michael = rw」 ,表達的意義徹底同樣。

「*」 表示「除了上面提到的那些人以外的其他全部人」,也就是「除了部門經理外的其餘全部人」

「* = r」 則表示「那些人只能讀,不能寫」。

對於根目錄下邊的子目錄,其權限配置方式是相同的,是須要把地址指明就能夠了,即[test:/folder1/folder2],這裏就不贅述了。

注意:配置中咱們可能會遇到「* =」這樣的狀況,他的目的是用來隔斷權限的繼承性。若是在某一級目錄的權限配置里加上這一句,則代表除了該配置中的用戶以外的其餘用戶徹底沒有這一級目錄的任何權利,既不可讀,更不可寫。

當全部的三個文件全都配置完成以後,接下來就是要讓它們都生效了,首先咱們須要確保svnserve服務已經停掉了,能夠經過「ps aux|grep svn」的方式來查看svn時候還在運行,若是還在運行的話直接經過「kill -9 [svn進程編號]」的方式把它停掉就能夠了,而後在經過命令「svnserve -d -r /home/user/svn/」來從新啓動svn服務,以上配置的三個文件就都起做用了!

相關文章
相關標籤/搜索