1.安裝svn服務端
yum -y install subversion
2.查看安裝路徑等信息
rpm -ql subversion
3.查看svn幫助信息
svn help
4.創建svn版本庫目錄(這是個大庫,里面用svnadmin創建的才是各個項目的庫)
mkdir /home/svnDB
5.創建版本庫(項目)
mkdir /home/svnDB/test/
svnadmin create /home/svnDB/test/
6.配置版本庫
進入/home/svnDB/test/conf,里面有三個文件
authz文件是權限控制文件
passwd是帳號密碼文件
svnserve.conf SVN服務配置文件
(1)在passwd文件的[users]塊中添加用戶名和密碼:賬號=密碼,例如username=password
(2)在authz的末尾增加
[/]
username=rw
(*=)這個是其他的都沒有讀寫權限,前面的才有
(3)在svnserve.conf
去掉四個個的前面的#號,如下
anon-access = none(匿名用戶設置為none,這樣才能看到日志信息,否則日志顯示nodate)
auth-access = write #授權用戶可以寫
password-db = passwd #使用passwd作為賬號文件
authz-db = authz #使用authz作為權限文件
ps:注意,前面不能有空格
7.啟動svn服務,這里啟動大倉庫
svnserve -d -r /home/svnDB
8.客戶端安裝這里略過,直接進入服務端的更新到web目錄
svn co svn://你的ip 你想放在那個目錄(這樣的創建到web目錄如果更新可以在那個目錄下直接svn update,但是有svn的隱藏文件)
svn export svn://你的ip 你想放在哪個目錄(這樣的web目錄沒有svn隱藏文件,但是不能直接用svn update更新,推薦上面的)
9.使用鈎子進行svn自動更新到web目錄
(1)、cd /home/svnDB/test/hooks/
(2)、cp cp post-commit.tmpl post-commit (復制這份模板文件,因為svn將要執行的是post-commit文件)
(3)、vim post-commit
將最后面幾行刪除
REPOS="$1"
REV="$2"
mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf
============================================================
然后加上自己將要執行的同步的命令
export LANG=zh_CN.UTF-8 #(這句話比較重要,如果客戶端跟服務器編碼不一樣會出現同步失敗)
WEB=你的web目錄 #(將要同步過去的web項目路徑)
/usr/bin/svn update $WEB #(/usr/bin/svn代表你的svn服務文件地址 如果是通過yum安裝的話,或者已經注冊了svn服務,則可以直接使用svn,不需要輸入全路徑)
wq!保存退出,此時已經完成更新命令
===========================================================================================================================
設置post-commit文件可以執行權限(若不設置則會出現commit false 255錯誤)
chmod a+x post-commit (或者chmod 777 post-commit)
10.將svn設置開機啟動
找個地方寫個腳本,svnserve命令最好用絕對路徑,可用which svnserve查找,如我的在/usr/bin/svnserve
腳本內容如:
#!/bin/bash
/usr/bin/svnserve -d -r /home/svnDB
保存之后加入到開機啟動文件那里
11.設置分組和目錄權限
我們開發的時候是多人,多人可能屬於一個組,有些組權限大,有些組權限小
打開配置文件authz,在[groups]區寫上分組信息,如
g48=akb,ske,nmb
other=mike,tom
然后權限配置
[/]
@g48=rw(以@開頭就是指這個組,這里/指所有的倉庫的所有目錄都有rw權限)
[test:/controllers]
@other=rw(這里是test倉庫下的controllers文件夾有rw權限,這個組checkout項目的時候地址就是svn://ip地址/test/controllers)
設置這些權限之后還要對應的去passwd文件設置帳號密碼,然后重啟svn
12.開啟修改日志權限
只要將文件hooks目錄下的pre-revprop-change.tmpl改名為pre-revprop-change,並加上執行權限即可。
不過這樣所有人都可以修改,還能修改其他人的日志
- 創建svn目錄
mkdir /home/svn //在home目錄下創建svn 文件夾 svnadmin create /home/svn/test //創建svn版本倉庫 test
創建完畢以后,在svn目錄下你會看到test目錄,test目錄詳細詳細如下
下面是這些目錄的詳細講解
在本文章主要是配置svn的信息以及如何同步代碼,所以涉及的目錄只有conf目錄以及hooks目錄,下面,我們開始講解如何配置svn
3.配置svn的基本信息
- cd ./conf //進入配置文件夾
authz 文件是創建svn組和組用戶的權限
passwd 設置組中用戶的賬號和密碼
svnserve.conf 配置版本庫信息和用戶文件和用戶密碼文件的路徑、版本庫路徑
(如果是多個倉庫通過相同權限,賬號和密碼控制,可以將authz,passwd文件放到svn目錄下)
(1)authz 配置svn組和組用戶的權限
[group] test = user1,user2 //創建test用戶組,並添加user1 user2用戶 [/] //指定根目錄先的權限 @test = rw //設置test組的權限為可讀可寫
(2)passwd 配置用戶密碼
[users] user1 = 12345678 //用戶名就是組添加成員是的用戶 user2 = 12345677
(3)svnserve.conf 配置版本庫信息和用戶文件和用戶密碼文件的路徑、版本庫路徑
[general] anon-access = none //其他人不可讀取 auth-access = write //設置authz中用戶的權限為可寫 password-db = passwd //指向自己passwd文件 authz-db = authz //指向authz文件 realm = /home/svn/test
以上就是配置svn的權限,用戶賬戶密碼以及倉庫路徑
此時,你需要將svn重啟,重啟方式以下
ps -ax | grep svn //查出svn進程 kill -9 ****** //通過kill -9方式殺死進程 *****是對應的pid svnserve -d -r /home/svn //啟動svn服務,當然你如果是想啟動具體的倉庫,可以將路徑寫的更加詳細一點
4.使用post-commit 實現同步代碼
代碼同步需要使用到hooks文件目錄下的post-commit勾子文件,在hooks下很多tmpl文件,這些文件都是勾子的模板來的,
如果需要使用的時候copy 一份去掉.tmpl后綴便可使用
(1)生成一個新的有效的勾子文件post-commit
cp post-commit.tpml post-commit
chmod 777 post-commit //設置post-commit 文件的權限 切記這步一定不可漏,不然后期運行時會報錯
這樣就會生成一個有效的post-commit 文件
(2)同步代碼操作
#!/bin/sh export LANG=en_US.UTF-8 SVN_PATH=/usr/bin/svn WEB_PATH=/data/wwwroot/default/test //test目錄就行你的項目的目錄 $SVN_PATH update $WEB_PATH --username user1 --password 12345678 //切記--username --password 是兩個-
(3)進入服務器目錄,將項目checkout 出來
svn co svn://localhost/test/ /data/wwwroot/default/test --username user1 --password 12345678
這樣子你的代碼同步功能已經實現了
5.客戶端使用
你只需下載個 tortoiseSVN 小烏龜然后將test倉庫拉取下來,然后將代碼放入倉庫文件夾中,通過添加文件方式add 后再commit ,你的項目就會同步到服務器中
6.我遇到的那些錯誤
1.首先客戶端連接svn服務器錯誤,之所以會連接失敗,是因為我的防火牆並沒有開啟3690(svn默認端口),你只需開啟即可
不會請看這個鏈接 http://www.linuxidc.com/Linux/2012-09/70785.htm
2.同步失敗 是因為post-commit文件的權限原因,你只需將權限設置大於755即可
3.提示**** is a direcitory /usr/bin/svn
你把這個搞錯了,他不是一個目錄,是svn的路徑