SVN是一種版本管理系統,前身是CVS,是開源軟件的基石。即便在溝通充分的狀況下,多人維護同一份源代碼的必定也會出現混亂的狀況,版本管理系統就是爲了解決這些問題。php
SVN中的一些概念 :
a. repository(源代碼庫)
源代碼統一存放的地方。
b. Checkout (提取)
當你手上沒有源代碼的時候,你須要從repository checkout一份。
c. Commit (提交)
當你已經修改了代碼,你就須要Commit到repository。
d. Update (更新)
當你已經Checkout了一份源代碼, Update一下你就能夠和Repository上的源代碼同步,你手上的代碼就會有最新的變動。 緩存
Centos 搭建SVN服務,有效的管理代碼,如下三步能夠快速搞定。bash
一、安裝 服務器
[root@www ~]# yum install subversion [root@www ~]# svnserve --version 判斷是否安裝成功 svnserve, version 1.6.11 (r934486) 出現類型提示,說明安裝成功。 有了SVN軟件後還須要創建SVN庫。 [root@www ~]# mkdir /opt/svn/repos [root@www ~]# svnadmin create /opt/svn/repos 執行上面的命令後,自動在repos下創建多個文件, 分別是conf, db,format,hooks, locks, README.txt。 |
二、配置網絡
上面的操做很簡單,幾個命令就搞定, 下面的操做也不難。dom
進入上面生成的文件夾conf下,進行配置, 有如下幾個文件authz, passwd, svnserve.conftcp
其中authz 是權限控制,能夠設置哪些用戶能夠訪問哪些目錄, passwd是設置用戶和密碼的, svnserve是設置svn相關的操做。svn
2 .1先設置passwd [/] anon-access = none # 使非受權用戶沒法訪問 |
好了,經過以上配置,你的svn就能夠了。
三、鏈接
[root@www ~]# svnserve -d -r /opt/svn/repos 啓動svn:
|
開放svn端口
修改
iptables -I INPUT -p tcp --dport 3690 -j ACCEPT
保存
/etc/rc.d/init.d/iptables save
重啓
service iptables restart
查看
/etc/init.d/iptables status
svn 命令詳解
一、將文件checkout到本地目錄
svn checkout path(path是服務器上的目錄)
例如:svn checkout svn://192.168.1.1/pro/domain
簡寫:svn co
二、往版本庫中添加新的文件
svn add 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 lock -m 「LockMessage「 [--force] PATH
例如:svn lock -m 「lock test file「 test.php
svn unlock PATH
五、更新到某個版本
svn update -r m path
例如:
svn update若是後面沒有目錄,默認將當前目錄以及子目錄下的全部文件都更新到最新版本。
svn update -r 200 test.php(將版本庫中的文件test.php還原到版本200)
svn update test.php(更新,於版本庫同步。若是在提交的時候提示過時的話,是由於衝突,須要先update,修改文件,而後清除svn resolved,最後再提交commit)
簡寫:svn up
六、查看文件或者目錄狀態
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 delete path -m 「delete test fle「
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m 「delete test file」
或者直接svn delete test.php 而後再svn ci -m ‘delete test file‘,推薦使用這種
簡寫:svn (del, remove, rm)
八、查看日誌
svn log path
例如:svn log test.php 顯示這個文件的全部修改記錄,及其版本號的變化
九、查看文件詳細信息
svn info path
例如:svn info test.php
十、比較差別
svn diff path(將修改的文件與基礎版本比較)
例如:svn diff test.php
svn diff -r m:n path(對版本m和版本n比較差別)
例如:svn diff -r 200:201 test.php
簡寫:svn di
十一、將兩個版本之間的差別合併到當前文件
svn merge -r m:n path
例如:svn merge -r 200:205 test.php(將版本200與205之間的差別合併到當前文件,可是通常都會產生衝突,須要處理一下)
十二、SVN 幫助
svn help
svn help ci
1三、版本庫下的文件和目錄列表
svn list path
顯示path目錄下的全部屬於版本庫的文件和目錄
簡寫:svn ls
建立版本庫:
終端輸入:svnadmin create [路徑]
該路徑能夠是相對路徑,例如,當前在home/user/svn/目錄下,輸入svnadmin create myproject,則該版本庫會被建立在home/user/svn/目錄下,新建一個文件夾名爲myproject,其中即是版本庫的文件了。
將文件導入版本庫:
終端輸入:svn import [源路徑] [目標版本庫路徑] -m [日誌信息]
源路徑能夠是相對路徑,導入時會遞歸導入源路徑下的全部文件和文件夾,目標版本庫路徑須要絕對目錄(反正我試驗是這樣的),例如版本庫的目錄是:home/user/svn/myproject/。則應該這樣寫:file:///home/user/svn/myproject/
例如將當前目錄導入版本庫myproject:
svn import . file:///home/user/svn/myproject -m "導入文件"
svn import /alidata/www/weijdan/ file:///alidata/server/svn/weiqiye/ -m 'create weiqiye'
從版本庫導出:
導入後原文件並未被歸入版本管理,若想得到受版本控制的文件,就須要從版本庫導出
終端輸入:svn co [版本庫路徑] [導出目標路徑]
例如將myproject庫中的文件導出到當前目錄:svn co file:///home/user/svn/myproject .
svn co file:///alidata/server/svn/weiqiye/ /alidata/www/weijdan
#!/bin/bash
REPOS="$1"
REV="$2"
export LANG=zh_CN.UTF-8
svn update /alidata/www/weijdan_test
echo `date`,`whoami`,$REPOS,$REV >> /alidata/server/svn/weiqiye/svn.log
chmod +x /alidata/server/svn/weiqiye/hooks/post-commit
1.建立執行腳本svn.sh(/root路徑下),其內容很簡單,以下:
#!/bin/bash
svnserve -d -r /var/www/svn/test
2.添加可執行權限
命令行運行
#chmod ug+x /root/svn.sh
3.添加自動運行
打開(vi或gedit) /etc/rc.d/rc.local ,在最後添加一行內容以下:
/root/svn.sh
保存退出。
4.檢查
重啓服務器,使用 ps -ef 看看svn進程是否啓動了。