Svn是比較優秀的版本控制工具,雖然功能和性能上無法和Git媲美,但由於其容易搭建和使用的特性,所以在各個小公司還是很受歡迎的。使用Git可參考《版本控制-Git服務器搭建和常用命令使用》本文介紹svn服務器搭建和常用命令介紹。
服務器搭建
本地服務器
http服務器
命令
常用命令
不常用命令
[root@master data1]# cat /etc/issue CentOS release 6.3 (Final) Kernel \r on an \m [root@master data1]# getconf LONG_BIT 64
一、搭建svn本地服務器
1、安裝svn服務器
[root@master data1]# yum install subversion -y
2、新建svn服務器目錄並初始化第一個倉庫project
mkdir /data1/svn svnadmin create /data1/svn/project
3、新建文件夾並導入服務器作為Svn倉庫project的第一個文件夾
cd /data1 mkdir -p test/client test/server svn import test file:///data1/svn/project/ -m 'init svn project' rm -rf test
這樣就將test目錄下的client和server文件夾導入到倉庫project下,然後刪掉test文件夾
4、新增用戶並設置密碼
修改文件 /data1/svn/project/conf/passwd 新增用戶 lx、u1、u2、u3,對應的明文密碼在 "=" 右邊
[users] # harry = harryssecret # sally = sallyssecret lx = lx_passwd u1 = u1_passwd u2 = u2_passwd u3 = u3_passwd
5、添加群組並增加訪問控制
修改文件 /data1/svn/project/conf/authz,增加g_lx和g_user兩個群組,並對project倉庫設置訪問控制權限,不同目錄允許不同群組的不同操作
[groups] g_lx = lx g_user = u1, u2, u3 [project:/] @g_lx = rw * = [project:/server] @g_lx = rw @g_user = r * = [project:/client] @g_lx = rw @g_user = rw * =
r 表示對該目錄有讀權限,w 表示對該目錄有寫權限,rw 表示對該目錄有讀寫權限。最後一行的* =表示,除了上面設置了權限的用戶組之外,其他任何人都被禁止訪問本目錄,這點比較重要。
6、修改配置文件
修改文件 /data1/svn/project/conf/svnserve.conf 讀取正確的配置
[general] anon-access = None auth-access = write password-db = /data1/svn/project/conf/passwd authz-db = /data1/svn/project/conf/authz
anon-access 控制沒注冊用戶訪問版本庫的權限。取值范圍為write、read和none,默認是read
auth-access 控制已注冊用戶訪問版本庫的權限。取值范圍為write、read和none,默認是write
password-db 指定用戶名口令文件名。沒有絕對路徑則文件位置為conf目錄的相對路徑。
authz-db 指定權限配置文件名,通過該文件可以實現以路徑為基礎的訪問控制。 沒有絕對路徑則文件位置為conf目錄的相對路徑。
realm 指定版本庫的認證域,即在登錄時提示的認證域名稱。
7、啟動Svn本地服務器
svnserve -d -r /data1/svn/ ps -ef | grep svn netstat -anp | grep svn
8、在其他機器上check out
svn co svn://master/project Username: lx Password for 'lx':
master為域名,建議直接使用ip地址即可。
遇到Store password unencrypted (yes/no)? 輸入yes
遇到Password for 'root': 直接按回車然後輸入用戶名 lx和密碼
測試提交命令
cd project/ cd client/ touch client.sh svn add client.sh svn ci -m 'add client.sh'
二、升級成http認證服務器
一般公司的Svn服務器會搭建成https認證的服務器,密碼則是使用ldap認證,所以搭建起來比較麻煩,除了httpd之外還要open-ssl等插件支持,但足夠安全和實用。本文只介紹普通的http認證,並且采用本地密碼驗證。
1、升級http需要安裝相關軟件
yum install subversion mysql-server httpd mod_dav_svn sendmail wget gcc-c++ make unzip -y
2、http之支持加密的密碼,所以需要將svn的明文密碼轉換
touch webpasswd htpasswd -b webpasswd lx lx_passwd
一步一步轉換或者在 /data1/svn/project/conf 目錄下新建下面perl腳本 pd.pl
#!/usr/bin/perl use warnings; use strict; open (FILE, "passwd") or die ("Cannot open the passwd file!\n"); open (OUT_FILE, ">webpasswd") or die ("Cannot open the webpasswd file!\n"); close (OUT_FILE); foreach (<FILE>) { if($_ =~ m/^[^#].*=/) { $_ =~ s/=//; `htpasswd -b webpasswd $_`; } }
運行 perl pd.pl 輸出: Adding password for user lx Adding password for user u1 Adding password for user u2 Adding password for user u3
3、修改 httpd.conf 文件
vim /etc/httpd/conf/httpd.conf 在文件最後添加 <Location /project> DAV svn SVNPath /data1/svn/project/ AuthType Basic AuthName "svn for project" AuthUserFile /data1/svn/project/conf/webpasswd AuthzSVNAccessFile /data1/svn/project/conf/authz Satisfy all Require valid-user </Location>
4、修改文件夾屬主為apache
chown -R apache.apache /data1/svn/project/
ps aux | grep httpd 可以看出用戶apache apache 26834 0.0 0.0 281608 3788 ? S 18:29 0:00 /usr/sbin/httpd -DFOREGROUND apache 26835 0.0 0.0 281840 5072 ? S 18:29 0:00 /usr/sbin/httpd -DFOREGROUND apache 26836 0.0 0.0 298372 6644 ? S 18:29 0:00 /usr/sbin/httpd -DFOREGROUND apache 26837 0.0 0.0 298372 6644 ? S 18:29 0:00 /usr/sbin/httpd -DFOREGROUND apache 26838 0.0 0.0 281680 4816 ? S 18:29 0:00 /usr/sbin/httpd -DFOREGROUND apache 26839 0.0 0.0 298360 6512 ? S 18:29 0:00 /usr/sbin/httpd -DFOREGROUND apache 26854 0.0 0.0 281680 4812 ? S 18:30 0:00 /usr/sbin/httpd -DFOREGROUND
5、重啟httpd
service restart httpd
6、打開web頁面 http://master/project/
建議更換成ip地址。輸入賬戶密碼如下:
三、svn常用命令
1、checkout到本地目錄
svn -–username=*** --password=*** checkout path
2、往版本庫中添加新的文件
svn add file
3、將改動的文件提交到版本庫
svn commit -m "LogMessage" [-N] [--no-unlock] PATH
# 如果選擇了保持鎖,就使用–no-unlock開關 # -m 後面是提交的日志信息,一般情況是必填的。
簡寫:svn ci
4、加鎖/解鎖
svn lock -m "LockMessage" [--force] PATH
5、本地更新到某個版本
svn update -r * path # *為版本號 svn update # 整個文件夾 svn update file # 單獨一個文件
6、查看文件或者目錄狀態
1)svn status path #目錄下的文件和子目錄的狀態,正常狀態不顯示 【?:不在svn的控制中;M:內容被修改;C:發生沖突;A:預定加入到版本庫;K:被鎖定】 2)svn status -v path # 顯示文件和子目錄狀態 第一列保持相同,第二列顯示工作版本號,第三和第四列顯示最後一次修改的版本號和修改人。 注:svn status、svn diff和svn revert這三條命令在沒有網絡的情況下也可以執行的,原因是svn在本地的.svn中保留了本地版本的原始拷貝。 簡寫:svn st
7、刪除文件
svn delete path -m "delete test fle" 例如:svn delete svn://master/project/test.php -m “delete test file” 或者分步驟(推薦使用這種) svn delete test.php svn ci -m ‘delete test file‘ 簡寫:svn [del, remove, rm]
8、查看日志
svn log file 顯示這個文件的所有修改記錄,及其版本號的變化
9、查看文件詳細信息
svn info file
10、比較差異
svn diff path # 將修改的文件與基礎版本比較 例如:svn diff test.php svn diff -r m:n path # 對版本m和版本n比較差異 例如:svn diff -r 200:201 test.php 簡寫:svn di
11、將兩個版本之間的差異合並到當前文件
svn merge -r m:n path 例如:svn merge -r 200:205 test.php # 將版本200與205之間的差異合並到當前文件,但是一般都會產生沖突,需要手動修改文件
12、Svn 幫助
svn help svn help ci
以上是常用命令,下面寫幾個不經常用的
13、版本庫下的文件和目錄列表
svn list path # 顯示path目錄下的所有屬於版本庫的文件和目錄 簡寫:svn ls
14、創建納入版本控制下的新目錄
svn mkdir * # 創建納入版本控制下的新目錄。 用法: (1)、mkdir PATH… (2)、mkdir URL… 創建版本控制的目錄。
(1)、每一個以工作副本 PATH 指定的目錄,都會創建在本地端,並且加入新增調度,以待下一次的提交。 (2)、每個以URL指定的目錄,都會透過立即提交於倉庫中創建.在這兩個情況下,所有的中間目錄都必須事先存在。
15、恢復本地修改
svn revert: 恢復原始未改變的工作副本文件 (恢復大部份的本地修改)。 用法: revert PATH… 注意: 本子命令不會存取網絡,並且會解除沖突的狀況。但是它不會恢復被刪除的目錄
16、代碼庫URL變更
svn switch (sw): 更新工作副本至不同的URL。 用法: (1)、switch URL [PATH] (2)、switch –relocate FROM TO [PATH...] (1)、更新你的工作副本,映射到一個新的URL,其行為跟“svn update”很像,也會將服務器上文件與本地文件合並。這是將工作副本對應到同一倉庫中某個分支或者標記的方法。 (2)、改寫工作副本的URL元數據,以反映單純的URL上的改變。當倉庫的根URL變動(比如方案名或是主機名稱變動),但是工作副本仍舊對映到同一倉庫的同一目錄時使用這個命令更新工作副本與倉庫的對應關系。
17、解決沖突
svn resolved: 移除工作副本的目錄或文件的“沖突”狀態。 用法: resolved PATH… 注意: 本子命令不會依語法來解決沖突或是移除沖突標記;它只是移除沖突的相關文件,然後讓 PATH 可以再次提交。
18、輸出指定文件或URL的內容
svn cat 目標[@版本]…如果指定了版本,將從指定的版本開始查找。 svn cat -r PREV filename > filename (PREV 是上一版本,也可以寫具體版本號,這樣輸出結果是可以提交的)
本文部分內容是參考網上資源,由博主@Lx整理。
原創文章,轉載請備注原文地址 http://www.cnblogs.com/lxmhhy/p/6044054.html
知識交流討論請加qq:1130010617。謝謝合作。
http://xxxxxx/Linuxjc/1171319.html TechArticle