A01:安裝subversion
sudo apt-get install subversion
A02:創建倉庫
很多目錄可以放subversion文件倉庫,最常見的是/usr/local/svn和/home/svn
sudo mkdir -p /home/svn/youshengyouse
sudo svnadmin create /home/svn/youshengyouse
//說明:先創建目錄(-p多級創建),再在該目錄下新建版本庫
A03:啟動svn網絡服務
svnserve -d -r /home/svn
// svnserve不要寫成svnserver
// -d表示以守護方式啟動
// -r表示倉庫的根目錄,這樣svn://ip地址/youshengyouse/就表示對應的倉庫路徑為/home/svn/youshengyouse
A04:配置倉庫
先備份配置文件
ubuntu@VM-0-8-ubuntu:/home/svn/fangshuixiushan/conf$ sudo cp svnserve.conf svnserve.conf.bak20180907
/home/svn/youshengyouse/conf/svnserve.conf文件的內容如下
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
/home/svn/youshengyouse/conf/passwd文件的內容如下
先備份buntu@VM-0-8-ubuntu:/home/svn/fangshuixiushan/conf$ sudo cp passwd passwd.bak20180907
[users]
aaaa=aaaamima
bbbb=bbbbmima
/home/svn/youshengyouse/conf/authz(先備份)
[groups]
develop = aaaa,bbbb
manger = aaaa
[/]
@develop=rw
*=r
修改后要重啟
svnserve -d -r /home/svn
//如果報錯svnserve: E000098: Can't bind server socket: Address already in use
查下svn當前占的端口
root@VM-0-14-ubuntu:~# ps -aux | grep svn
root 16960 0.0 0.1 72492 940 ? Ss 14:29 0:00 svnserve -d -r /home/svn
root 19765 0.0 0.0 13232 880 pts/5 S+ 15:20 0:00 grep --color=auto svn
//kill進程
kill -9 16960
//再啟動
svnserve -d -r /home/svn
A05:編輯騰訊云安全組
添加規則
0.0.0.0/0 TCP:3690 允許 -
否則會拒絕svn訪問
A06:安裝客戶端
A07:測試
倉庫路徑為 svn://ip地址/youshengyouse/
檢出(checkout)成功,新建一文件上傳,也成功,ok,萬里長征,完成60%
常見問題
提交如果報錯
Can't connect to host '134.175.42.125': 由于目標計算機積極拒絕,無法連接。
原因1:svn服務未啟動
line 1: Section header expected
原因:一般是本個配置文件格工或哪里多了空格之類的
can't open file db/txn-current-lock:permission denied
原因:權限不夠
$ sudo chmod -R 777 /home/svn/youshengyouse
post-commit hook failed (exit code 255) with no output.
原因: post-commit 腳本文件的權限不對,post-commit 腳本必須有 +x 權限。
sudo chmod 777 /home/svn/youshengyouse/hooks/post-commit
============如何讓svn代碼與web網站同步=========
只在svn提交就可以,不要再向網站提交代碼
B01:新建鉤子文件 post-commit
#!/bin/bash
# 基本變量
export LANG=en_US.UTF-8
dateTime=`date +%F`
dateTimeMinute=`date +%H%M%S`
binSvn=/usr/bin/svn # 你svn命令的絕對路徑,如果不知道,請用find / -name svn查找
dirHtmlApp=/var/www/youshengyouse/ # 檢出的web站點根目錄
logFileName=/tmp/youshengyouse_svnhooks_${dateTime}.log
# svn配置
# [1] REPOS-PATH 倉庫路徑
# [2] REV 剛執行修訂版本號
# [3] TXN-NAME (the name of the transaction that has become REV)
REPOS="$1"
REV="$2"
# 檢出或者更新subversion,鉤子的核心功能
echo "-- $dateTimeMinute" >> $logFileName
# 先要將svn倉庫中的內容檢出到網站對應的目錄中,如何判斷有沒有檢出過呢,就是看是否有文件夾.svn
# 如是檢出過,就直接更新就行
if [ ! -d $dirHtmlApp/.svn ]; then
# 檢出SVN
echo "$binSvn co file://$REPOS/ $dirHtmlApp" >> $logFileName
# 使用命令co檢出
$binSvn co file://$REPOS/ $dirHtmlApp
if [ $? -eq 0 ]; then
echo "checkout ok" >> $logFileName
else
echo "checkout error" >> $logFileName
fi
else
# 更新svn
echo " $binSvn up $REV $dirHtmlApp " >> $logFileName
# 使用up命令更新
$binSvn up $REV $dirHtmlApp >> $logFileName
if [ $? -eq 0 ]; then
echo " update sucess " >> $logFileName
else
echo " update fial " >> $logFileName
fi
fi
echo "--" >> $logFileName
B02:上傳
建議先用測試下,檢出,上傳,刪除后,確認無誤后再進行批量操作