svn http支持

一、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:// [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,有將換成空格,是否有不允許上傳的文件,是否有超過限制大小的文件等等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章