centos7安裝配置svn

centos下直接用yum安裝svn
php

yum install subversion

檢查svn版本linux

svnserve --version

1、創建版本庫vim

建立svn數據目錄(subversion默認是把/var/svn做爲數據根目錄的,開機啓動默認也是從這裏)centos

mkdir -p /var/svn

建立版本庫bash

svnadmin create /var/svn/test

若是刪除版本庫服務器

rm -rf /var/svn/test


2、導入導出工程項目ide

當咱們拿到程序給咱們的代碼以後,咱們就須要在svn服務器上將工程導入倉庫,假如咱們的網站是放在/var/www/test目錄下
svn

svn import /var/www/test file:///var/svn/test -m "test"

-m後是咱們取的工程名
post

咱們須要從倉庫導出一份代碼,這樣才能實如今svn服務器上修改代碼,update到運行目錄網站

svn checkout svn://localhost:3777/test /var/www/final

其中/var/www/final是咱們最後部署上線的目錄


3、配置svn配置文件

每一個版本庫建立以後都會生成svnserve.conf主要配置文件

vim /var/svn/test/conf/svnserve.conf
[general]
anon-access = none                    #控制非鑑權用戶訪問版本庫的權限
auth-access = write                   #控制鑑權用戶訪問版本庫的權限
password-db = passwd                  #指定用戶名口令文件名
authz-db = authz                      #指定權限配置文件名
realm = test                          #指定版本庫的認證域,即在登陸時提示的認證域名稱


4、編輯svn用戶配置文件

vim /var/svn/test/conf/passwd
[users]
admin = admin                #用戶,密碼
fuhd = fuhd                #用戶,密碼
test = test                #用戶,密碼


5、編輯svn權限控制配置文件

vim /var/svn/test/conf/authz
[groups]
admin = admin         #admin爲用戶組,等號以後的admin爲用戶
test = fuhd,test

[test:/]                #表示根目錄(/var/svn/test),test: 對應前面配置的realm = test
@admin = rw            #表示admin組對根目錄有讀寫權限,r爲讀,w爲寫

[test:/test]         #表示test目錄(/var/svn/test/test)
@test = rw                #表示test組對test目錄有讀寫權限


6、利用鉤子hooks自動更新提交代碼到網站目錄

須要編輯

vim /var/svn/test/hooks/post-commit
#!/bin/sh
REPOS="$1"
REV="$2"
export      

SVN_PATH=/usr/bin/svn
WEB_PATH=/data/www/final
SVN_USER=test                                
SVN_PW=test
LOG_PATH=/var/log/svn.log

echo `date "+%Y-%m-%d %H:%M:%S"` >>$LOG_PATH
echo `whoami`,$REPOS,$REV >>$LOG_PATH

$SVN_PATH update $WEB_PATH --username $SVN_USER --password $SVN_PW --no-auth-cache >>$LOG_PATH || exit 1

chown -R www:www $WEB_PATH

exit 0

保存退出後

chmod +x post-commit

這樣每次提交後都會更新到咱們的網站目錄。

其餘hooks的做用以下

post-commit

在提交完成,成功建立版本以後執行該鉤子,提交已經完成,不可更改,所以本腳本的返回值被忽略。

post-lock

對文件進行加鎖操做以後執行該腳本

post-revprop-change

在修改 revision 屬性以後,執行該腳本。由於修改稿已經完成,不可更改,所以本腳本的返回值被忽略(不過實際上的實現彷佛是該腳本的正確執行與否影響屬性修改)

post-unlock

對文件進行解鎖操做以後執行該腳本

pre-commit

在 Subversion transaction 完畢以後,在提交以前,執行該腳本

pre-lock

對文件進行加鎖操做以前執行該腳本

pre-revprop-change

在修改 revision 屬性以前,執行該腳本

pre-unlock

對文件進行解鎖操做以前執行該腳本

start-commit

在客戶端尚未向服務器提交數據以前,即尚未創建 Subversion transaction(縮寫爲 txn) 以前,執行執行該腳本


7、啓動,查看和中止SVN服務

啓動SVN服務

# -d:守護進程  -r:svn數據根目錄   --listen-port:監聽端口
svnserve -dr /var/svn/test --listen-port 3690

查看SVN服務

ps aux|grep svnserve               #默認端口爲:3690

注意打開防火牆和關閉selinux

vim /etc/sysconfig/selinux
SELINUX = disable               #值修改成disable


遇到的問題

import的時候提示錯誤

svn: E000022: Error converting entry in directory '/var/www/test/images' to UTF-8
svn: E000022: Can't convert string from native encoding to 'UTF-8':

問題就是環境變量的編碼設置的很差,解決辦法

vim ~/.bashrc

加上

export LC_ALL=en_US.UTF-8
export.UTF-8
export LANGUAGE=en_US.UTF-8
source ~/.bashrc


update的時候提示錯誤

post-commit hook failed (exit code 1) with output:
Conflict discovered in '/data/www/index.php',
Select: (p) postpone, (df) diff-ful, (e) edit.
     (mc) mine-conflict, (tc) theirs-conflict,
     (s) show all options: svn: E070014: Can't read stdin: End of file found

因爲更新的問題,網站和svn裏的文件不一致,從svn checkout一份文件覆蓋到網站裏面去

svn checkout --depth=empty file:///svn/www/ www
cd www
svn update index.php

其中,www爲checkout後的文件夾名,本身能夠隨意指定,執行svn checkout命令後,會獲得一個名爲www的空目錄,裏面什麼都沒有,而實現這一效果的就是參數中指定的depth=empty。下一步就是進入剛剛checkout下來的www目錄,執行update操做,想取哪一個文件就checkout哪一個文件就行了。最後把不一致的文件copy到網站去覆蓋原有文件(最好把原有文件備份一份)。

相關文章
相關標籤/搜索