http://blog.sina.com.cn/s/blog_3eba8f1c0100dqk1.html
ubuntu下SVN伺服器安裝配置
(2009-04-22 17:01:40)

轉載
标簽: ubuntusvnit | 分類: sys-linux/windows |
一、SVN安裝
1.安裝包
$ sudo apt-get install subversion
2.添加svn管理使用者及subversion組
$ sudo adduser svnuser
$ sudo addgroup subversion
$ sudo addgroup svnuser subversion
3.建立項目目錄
$ sudo mkdir /home/svn
$ cd /home/svn
$ sudo mkdir fitness
$ sudo chown -R root:subversion fitness
$ sudo chmod -R g+rws fitness
4.建立SVN檔案倉庫
$ sudo svnadmin create /home/svn/fitness
5.通路方式及項目導入:
$ svn co file:///home/svn/fitness
或者
$ svn co file://localhost/home/svn/fitness
* 注意:
如果您并不确定主機的名稱,您必須使用三個斜杠(///),而如果您指定了主機的名稱,則您必須使用兩個斜杠(//).
//--
下面的指令用于将項目導入到SVN 檔案倉庫:
$ svn import -m "New import" /home/svn/fitness file:///home/svnuser/src/fitness
一定要注明導入資訊
//--------------------------//
6.通路權限設定
修改 /home/svn/fitness目錄下:
svnserve.conf 、passwd 、authz三個檔案,行最前端不允許有空格
//--
編輯svnserve.conf檔案,把如下兩行取消注釋
password-db = password
authz-db = authz
//補充說明
# [general]
anon-access = read
auth-access = write
password-db = passwd
其中 anon-access 和 auth-access 分别為匿名和有權限使用者的權限,預設給匿名使用者隻讀的權限,但如果想拒絕匿
名使用者的通路,隻需把 read 改成 none 就能達到目的。
//--
編輯/home/svnuser/etc/passwd 如下:
[users]
mirze = 123456
test1 = 123456
test2 = 123456
//--
編輯/home/svnuser/etc/authz如下
[groups]
admin = mirze,test1
test = test2
[/]
@admin=rw
*=r
這裡設定了三個使用者mirze,test1,test2密碼都是123456
其中mirze和test1屬于admin組,有讀和寫的權限,test2屬于test組隻有讀的權限
7.啟動SVN服務
svnserve -d -r /home/svn
描述說明:
-d 表示svnserver以“守護”程序模式運作
-r 指定檔案系統的根位置(版本庫的根目錄),這樣用戶端不用輸入全路徑,就可以通路版本庫
如: svn://192.168.12.118/fitness
這時SVN安裝就完成了.
區域網路通路方式:
例如:svn checkout svn://192.168.12.118/fitness --username mirze --password 123456 /var/www/fitness
-----------------------------------------------------------------------
二、HTTP:// [apache]
1.安裝包 [已安裝subversion]
$ sudo apt-get install libapache2-svn
建立版本倉庫:
sudo svnadmin create /目錄位址
目錄位址必須存在,這個就是儲存版本倉庫的地方,不同的版本倉庫建立不同的檔案夾即可,比如:
sudo svnadmin create /home/svn/project
本來/home/svn/project這個目錄下什麼都沒有,執行下面的指令之後再去看一下,多出一些檔案和檔案夾,我們需要操作的是conf這個檔案夾,這個檔案夾下有一個檔案,叫做passwd,用來存放使用者名和密碼。
然後把這個版本倉庫目錄授權給apache讀寫:
sudo chown -R www-data:www-data /目錄位址
然後來到打開apache配置檔案:
sudo gedit /etc/apache2/mods-available/dav_svn.conf
加入如下内容:
<Location /project>
DAV svn
SVNPath /home/svn/project
AuthType Basic
AuthName “myproject subversion repository”
AuthUserFile /home/svn/project/conf/passwd
#<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
#</LimitExcept>
</Location>
location說的是通路位址,比如上述位址,通路的時候就是
http://127.0.0.1/project
其中有兩行被注釋掉了,以保證每次都需要使用者名密碼。
最後一步就是建立通路使用者了,建議将使用者名密碼檔案存放在目前版本倉庫下conf檔案夾下,這樣版本倉庫多的時候無至于太亂。
因為conf檔案夾下已經存在passwd檔案了,是以直接添加使用者:
sudo htpasswd -c /home/svn/project/conf/passwd test
然後輸入兩遍密碼,laoyang這個使用者就建立好了。
打開/home/svn/project/conf/passwd這個檔案,會開到形如如下形式的文本:
test:WEd.83H.gealA //後面是加密後的密碼。
建立以後,再次需要往别的版本倉庫添加這個使用者,直接把這一行複制過去就可以了。
重新開機apache就可以了。
sudo /etc/init.d/apache2 restart
-----------------------------------------------------------------------
三、同步更新 [勾子]
同步程式思路:使用者送出程式到SVN,SVN觸發hooks,按不同的hooks進行處理,這裡用到的是post-commit,利用post-commit到代碼檢出到SVN伺服器的本地硬碟目錄,再通過rsync同步到遠端的WEB伺服器上。
知識點:
1、SVN的hooks
# start-commit 送出前觸發事務
# pre-commit 送出完成前觸發事務
# post-commit 送出完成時觸發事務
# pre-revprop-change 版本屬性修改前觸發事務
# post-revprop-change 版本屬性修改後觸發事務
通過上面這些名稱編寫的腳本就就可以實作多種功能了,相當強大。
2、同步指令rsync的具體參數使用
3、具有基個語言的程式設計能力bash python perl都可以實作
post-commit具體實作細節
post-commit腳本
編輯檔案:sudo vim /home/svn/fitness/hooks/post-commit
注意:編輯完成post-commit後,執行:sudo chmod 755 post-commit
内容:
#!/bin/sh
export LANG=zh_CN.UTF-8
sudo /usr/bin/svn update /var/www/www --username mirze --password 123456
或
#Set variable
SVN=/usr/bin/svn
WEB=/home/test_nokia/
RSYNC=/usr/bin/rsync
LOG=/tmp/rsync_test_nokia.log
WEBIP="192.168.0.23"
export LANG=en_US.UTF-8
#update the code from the SVN
$SVN update $WEB --username user --password password
#If the previous command completed successfully, to continue the following
if [ $? == 0 ]
then
echo "" >> $LOG
echo `date` >> $LOG
echo "##############################" >> $LOG
chown -R nobody:nobody /home/test_nokia/
#Synchronization code from the SVN server to the WEB server, notes:by the key
$RSYNC -vaztpH --timeout=90 --exclude-from=/home/svn/exclude.list $WEB root@$WEBIP:/www/ >> $LOG
fi
以上是具體的post-commit程式
注意事項:
1、一定要定義變量,主要是用過的指令的路徑。因為SVN的考慮的安全問題,沒有調用系統變量,如果手動執行是沒有問題,但SVN自動執行就會無法執行了。
2、SVN update 之前一定要先手動checkout一份出來,還有這裡一定要添加使用者和密碼如果隻是手動一樣會更新,但自動一樣的不行。
3、加上了對前一個指令的判斷,如果update的時候出了問題,程式沒有退出的話還會繼續同步代碼到WEB伺服器上,這樣會造成代碼有問題
4、記得要設定所屬使用者,因為rsync可以同步檔案屬性,而且我們的WEB伺服器一般都不是root使用者,使用者不正确會造成WEB程式無法正常工作。
5、建議最好記錄日志,出錯的時候可以很快的排錯
6、最後最關鍵的資料同步,rsync的相關參數一定要清楚,這個就不說了。注意幾個場景:
這裡的環境是SVN伺服器與WEB伺服器是開的
把SVN伺服器定義為源伺服器 WEB伺服器為目的伺服器
場景一、如果目的WEB伺服器為綜合的混雜的,像隻有一個WEB靜态資源,使用者送出的,自動生成的都在WEB的一個目錄下,建議不要用–delete這個參數
上面這個程式就是這樣,實作的是源伺服器到目的伺服器的更新和添加,而沒有删除操作,WEB伺服器的内容會多于源SVN的伺服器的
場景二、實作鏡像,即目的WEB伺服器與源SVN伺服器一樣的資料,SVN上任何變化WEB上一樣的變化,就需要–delete參數
場景三、不需要同步某些子目錄,可能有些目錄是緩存的臨時垃圾目錄,或者是專用的圖檔目錄(而不是樣式或者排版的)要用exclude這個參數
注意:這個參數的使用不用寫絕對路徑,隻要目錄名稱就行 aa代表檔案 aa/ 代表目錄 ,缺點就是如果有多個子目錄都是一樣的名稱那麼這些名稱就都不會被同步
建議用–exclude-from=/home/svn/exclude.list 用檔案的形式可以友善的添加和删除
exclude.list
.svn/
.DS_Store
images/
利用SVN的鈎子還可以寫出很多的程式來控制SVN 如代碼送出前檢視是否有寫日志,是否有tab,有将換成空格,是否有不允許上傳的檔案,是否有超過限制大小的檔案等等。
http://tech.ccidnet.com/art/738/20100728/2131847_1.html
Ubuntu SVN 用戶端配置和使用
釋出時間:2010.07.28 09:32 來源:51cto 作者:51cto
想知道到Ubuntu SVN系統的真相麼,想知道Ubuntu SVN系統中藏有的内在奧義麼,隻有我來給大家全面講解介紹Ubuntu SVN系統,Ubuntu SVN作為日常開發中不可缺少的工具,今天終于開始在Ubuntu下使用了。
1、首先需要安裝Ubuntu SVN。Ubuntu下的SVN安裝十分簡單,sudo apt-get install subversion,然後根據提示一步一步,就完成了Ubuntu SVN的安裝;
2、檢出檔案(checkout)。
使用指令:svn co http://{svn repository url} /destination 然後系統會用目前的使用者名登入,提示輸入密碼,如果第一次密碼輸入錯誤,會提示你輸入使用者名;輸入正确後,就可以檢出檔案了。
3、Ubuntu SVN送出檔案(commit)。
進入需要更新的目錄,輸入指令:svn commit -m path-to-commit,其中path-to-commit可以為空,成功後會提示更新後的版本号。
4、更新檔案(update)。
svn update,在要更新的目錄運作這個指令就可以了。
5、檢視日志(log)。
svn log path
6、為Eclipse配置Ubuntu SVN。
http://subclipse.tigris.org/files/documents/906/38385/site-1.2.3.zip,可以從這個位址下載下傳Eclipse的插件,拷貝到plugins目錄中以後,重新開機Eclipse就可以打開Ubuntu SVN的視圖了。也可以通過官方的 安裝頁面來進行線上安裝:http://subclipse.tigris.org/install.html