Ubuntu下SVN安裝和配置

1、SVN安裝
1.安裝包
1.$ sudo apt-get install subversionphp

2.建立項目目錄html

$ sudo mkdir /home/xiaozhe/svn前端

$ cd /home/xiaozhe/svn/python

$ sudo mkdir myproapache

3.建立svn文件倉庫編程

$ sudo svnadmin create /home/xiaozhe/svn/myproubuntu

4.導入項目到svn文件倉庫 (無關緊要)vim

$ sudo svn import -m "" 你的文件夾路徑 file:///home/xiaozhe/svn/mypro瀏覽器

5.訪問權限設置
修改 /home/xiaozhe/svn/mypro/conf目錄下:
svnserve.conf 、passwd 個文件,行最前端不容許有空格
編輯svnserve.conf文件,把以下面行取消註釋,並須要頂格緩存

anon-access = read

auth-access = write

password-db = passwd
編輯passwd  以下:
[users]
andy = andy
6. 開啓svnserve,以SVN根目錄開啓:
$ svnserve -d -r /home/xiaozhe/svn

7.檢查是否正常啓動

$ netstat -ntlp

能夠看到有一個端口爲3690的地址,表示啓動成功

(若是使用Apache鏈接,則跳過下步)

8.局域網訪問,checkout出來SVN庫的文件

svn checkout svn://SvnIp地址/mypro
或者簡寫爲:
svn co svn://SvnIp地址/mypro

2、在Ubuntu下使用Apache配置Subversion

1.安裝必要軟件

$ sudo apt-get install subversion libapache2-svn apache2

2.修改apache配置文件/etc/apache2/mods-available/dav_svn.conf

<Location /svn/mypro>

DAV svn

SVNPath /home/xiaozhe/svn/mypro

AuthType Basic

AuthName "myproject subversion repository"

AuthUserFile /etc/subversion/passwd

#<LimitExcept GET PROPFIND OPTIONS REPORT>

Require valid-user

#</LimitExcept>

</Location>

若是須要用戶每次登陸時都進行用戶密碼驗證,請將<LimitExcept GET PROPFIND OPTIONS REPORT>與</LimitExcept>兩行註釋掉。

當您添加了上面的內容,您必須從新起動 Apache 2 Web 服務器,請輸入下面的命令:

$ sudo /etc/init.d/apache2 restart

3.建立 /etc/subversion/passwd 文件,該文件包含了用戶受權的詳細信息

$ sudo htpasswd -c /etc/subversion/passwd user_name

它會提示您輸入密碼,當您輸入了密碼,該用戶就創建了。「-c」選項表示建立新的/etc/subversion/passwd文件,因此user_name所指的用戶將是文件中惟一的用戶。若是要添加其餘用戶,則去掉「-c」選項便可:$ sudo htpasswd /etc/subversion/passwd other_user_name

4.您能夠經過下面的命令來訪問文件倉庫:

$ svn co http://hostname/svn/myproject myproject --username user_name

或者經過瀏覽器:http://hostname/svn/myproject

3、ubuntu SVN命令大全

一、將文件checkout到本地目錄 svn checkout path(path 是服務器上的目錄)
例如:$ svn checkout svn://192.168.1.1/pro

簡寫:$ svn co svn://192.168.1.1/pro

二、往版本庫中添加新的文件

$ svnadd file
$ svn add test.php(添加test.php)
$ svn add *.php(添加當前目錄下全部的php文件)

三、將改動的文件提交到版本庫

$ svn commit -m "LogMessage" [-N] [--no-unlock] PATH(若是選擇了保持鎖,就使用–no- unlock開關)
例如:$ svn commit -m 'add test file for my test' test.php
簡寫:$ svn ci

四、更新到某個版本

$ svn update -rm path
例如:$ svn update若是後面沒有目錄,默認將當前目錄以及子目錄下的全部文件都更新到最新版本。
$ svn update -r 200 test.php(將版本庫中的文件test.php還原到版本200)
$ svn update test.php(更新,於版本庫同步。若是在提交的時候提示過時的話,是由於衝突,須要先update,修改文 件,而後清除$ svn resolved,最後再提交commit) 簡寫:svn up

五、刪除文件

$ svn delete path -m 'delete test fle'

例如:$ svn delete test.php 而後再$ svn ci -m 'delete test file'

簡寫:svn (del, remove, rm) 

六、比較差別

$ svn diff path(將修改的文件與基礎版本比較)
例如:$ svn diff test.php
$ svn diff -r m:n path(對版本m和版本n比較差別)
例如:svn diff -r 200:201 test.php
簡寫:svn di

七、查看文件或者目錄狀態

1)svn status path(目錄下的文件和子目錄的狀態,正常狀態不顯示)
【?:不在svn的控制中;M:內容被修改;C:發生衝突;A:預約加入到版本庫;K:被鎖定】
2)svn status -v path(顯示 文件和子目錄狀態)
第一列保持相同,第二列顯示工做版本號,第三和第四列顯示最後一次修改的版本號和修改人。
注:svn status、svn diff和 svn revert這三條命令在沒有網絡的狀況下也能夠執行的,緣由是svn在本地的.svn中保留了本地版本的原始拷貝。
簡寫:svn st

八、解決衝突

$ svn resolved: 移除工做副本的目錄或文件的「衝突」狀態。
用法: $ resolved PATH…
注意: 本子命令不會依語法來解決衝突或是移除衝突標記;它只是移除衝突的
相關文件,而後讓 PATH 能夠再次提交。

4、同步更新 [勾子]

同步程序思路:用戶提交程序到SVN,SVN觸發hooks,按不一樣的hooks進行處理,這裏用到的是post-commit,利用post-commit到代碼檢出到SVN服務器的本地硬盤目錄,再經過rsync同步到遠程的WEB服務器上。

知識點:
一、SVN的hooks
# start-commit 提交前觸發事務
# pre-commit 提交完成前觸發事務
# post-commit 提交完成時觸發事務
# pre-revprop-change 版本屬性修改前觸發事務
# post-revprop-change 版本屬性修改後觸發事務
經過上面這些名稱編寫的腳本就就能夠實現多種功能了,至關強大。

二、同步命令rsync的具體參數使用

三、具備基個語言的編程能力bash python perl均可以實現
post-commit腳本

編輯文件:sudo vim /home/xiaozhe/svn/mypro/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/myblog --username xiaozhe --password xiaozhe

或更加複雜的同步更新

#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程序 注意事項: 一、必定要定義變量,主要是用過的命令的路徑。由於SVN的考慮的安全問題,沒有調用系統變量,若是手動執行是沒有問題,但SVN自動執行就會沒法執行了。 二、SVN update 以前必定要先手動checkout一份出來,還有這裏必定要添加用戶和密碼若是隻是手動同樣會更新,但自動同樣的不行。 三、加上了對前一個命令的判斷,若是update的時候出了問題,程序沒有退出的話還會繼續同步代碼到WEB服務器上,這樣會形成代碼有問題 四、記得要設置所屬用戶,由於rsync能夠同步文件屬性,並且咱們的WEB服務器通常都不是root用戶,用戶不正確會形成WEB程序沒法正常工做。 五、建議最好記錄日誌,出錯的時候能夠很快的排錯 六、最後最關鍵的數據同步,rsync的相關參數必定要清楚,這個就不說了。注意幾個場景: 這裏的環境是SVN服務器與WEB服務器是開的 把SVN服務器定義爲源服務器 WEB服務器爲目的服務器 場景1、若是目的WEB服務器爲綜合的混雜的,像只有一個WEB靜態資源,用戶提交的,自動生成的都在WEB的一個目錄下,建議不要用–delete這個參數 上面這個程序就是這樣,實現的是源服務器到目的服務器的更新和添加,而沒有刪除操做,WEB服務器的內容會多於源SVN的服務器的 場景2、實現鏡像,即目的WEB服務器與源SVN服務器同樣的數據,SVN上任何變化WEB上同樣的變化,就須要–delete參數 場景3、不須要同步某些子目錄,可能有些目錄是緩存的臨時垃圾目錄,或者是專用的圖片目錄(而不是樣式或者排版的)要用exclude這個參數 注意:這個參數的使用不用寫絕對路徑,只要目錄名稱就行 aa表明文件 aa/ 表明目錄 ,缺點就是若是有多個子目錄都是同樣的名稱那麼這些名稱就都不會被同步 建議用–exclude-from=/home/svn/exclude.list 用文件的形式能夠方便的添加和刪除 exclude.list .svn/ .DS_Store images/ 利用SVN的鉤子還能夠寫出不少的程序來控制SVN 如代碼提交前查看是否有寫日誌,是否有tab,有將換成空格,是否有不容許上傳的文件,是否有超過限制大小的文件等等。

相關文章
相關標籤/搜索