一、檢查SVN是否安裝
centos7系統自帶SVN
# rpm -qa subversion
[root@localhost ~]# rpm -qa subversion subversion-1.7.14-14.el7.x86_64
如果沒有則通過yum安裝
# yum install subversion -y
二、檢查已安裝版本
# svnserve --version
[root@localhost ~]# svnserve --version svnserve, version 1.7.14 (r1542130) compiled Apr 11 2018, 02:40:28 Copyright (C) 2013 The Apache Software Foundation. This software consists of contributions made by many people; see the NOTICE file for more information. Subversion is open source software, see http://subversion.apache.org/ The following repository back-end (FS) modules are available: * fs_base : Module for working with a Berkeley DB repository. * fs_fs : Module for working with a plain file (FSFS) repository. Cyrus SASL authentication is available. [root@localhost ~]#
三、創建SVN版本庫(也就是項目要存放的倉庫)
1、創建所有項目的根目錄
# mkdir -p /home/svn
2、創建項目要存放的位置(必須要在/home/svn根目錄下創建)
# svnadmin create /home/svn/cloud-platform
# svnadmin create /home/svn/cloud-platform-client
# svnadmin create /home/svn/cloud-platform-web
# svnadmin create /home/svn/docs
[root@localhost ~]# svnadmin create /home/svn/cloud-platform [root@localhost ~]# svnadmin create /home/svn/cloud-platform-client [root@localhost ~]# svnadmin create /home/svn/cloud-platform-web [root@localhost ~]# svnadmin create /home/svn/docs [root@localhost ~]# [root@localhost ~]# ls /home/svn/ cloud-platform cloud-platform-client cloud-platform-web docs
說明:
我將我的版本庫放在home/svn目錄下,這個svn表示我所有項目的根目錄,因為可能會存在多個項目都在一台虛擬機上存放的時候。
svnadmin create是創建單個項目的版本庫,ProjectName(cloud-platform)是項目的名字
3、查看創建的項目
[root@localhost cloud-platform]# ls conf db format hooks locks README.txt [root@localhost cloud-platform]# [root@localhost cloud-platform]# pwd /home/svn/cloud-platform
四、配置代碼庫
進入/home/svn/cloud-platform/conf文件夾下
authz:權限控制文件
passwd:帳號密碼文件
svnserve.conf :SVN服務配置文件
[root@localhost conf]# ls authz passwd svnserve.conf [root@localhost conf]# [root@localhost conf]# pwd /home/svn/cloud-platform/conf
1、設置可以訪問這個遠程倉庫的人的帳號密碼
# vi passwd
在[users]下面進行用戶名密碼的設置
### This file is an example password file for svnserve. ### Its format is similar to that of svnserve.conf. As shown in the ### example below it contains one section labelled [users]. ### The name and password for each user follow, one account per line. [users] # harry = harryssecret # sally = sallyssecret user1 = 密碼 user2 = 密碼 。。。
編輯完后,按Esc鍵退出編輯模式,輸入 :wq! 保存文件並退出
不用跟系統的/etc/passwd文件中用戶名密碼相同,用戶名密碼可以隨意設置
note:
這里設置的用戶名密碼是用於svn://協議訪問代碼倉庫使用的。
這與http協議使用的帳號密碼不是使用相同的帳號密碼文件
2、設置權限控制
# vi authz
在[groups]中設置組,和組員
在下面分別為設計組design和開發組dev
設計組需要有對ProjectName項目中的doc文件有讀寫權限,而開發組只能擁有讀的權限
[/doc]對這個文件夾有設置權限
開發組需要對ProjectName項目中的src源碼文件有讀寫權限。其他人員不能進行寫操作。
。所以分別設置/doc和/src文件的權限
為了測試方便,加一個[/]倉庫根目錄的訪問權限,任意用戶都可以讀取內容
不直接對特定用戶設置權限,而是對組進行授權,將用戶加入該組。
[groups] # harry_and_sally = harry,sally # harry_sally_and_joe = harry,sally,&joe design = user1,user2,user... developer = user11,user22,user... [/doc] @design = rw @dev = r [/src] @dev = rw * = r [/] * = r
3、修改svnserve.conf文件
# vi svnserve.conf
釋放如下幾行的注釋
anon-access=none #匿名用戶不可訪問 auth-access=write #授權用戶可寫 password-db=passwd #使用哪個文件作為賬號文件 authz-db = authz #使用哪個文件作為權限文件 realm = /home/svn/cloud-platform #認證空間名,版本庫所在目錄
如下圖:
到此,svn倉庫已經搭建完畢了
五、啟動svn與停止
# svnserve -d -r /home/svn
讓svn以deamon守護進程方式 以root用戶啟動運行。
注意,這路徑不能到ProjectName
否則在訪問時候會報svn: E170000: URL 'svn://虛擬機ip地址/ProjectName' doesn't exist
查看SVN進程
# ps aux | grep svn
[root@localhost ~]# ps aux | grep svn root 2171 0.0 0.0 112704 960 pts/0 S+ 13:58 0:00 grep --color=auto svn root 19195 0.0 0.0 180716 952 ? Ss Jun19 0:00 svnserve -d -r /home/svn
監聽SVN端口
# netstat -tunlp | grep 3690
[root@localhost ~]# netstat -tunlp | grep 3690 tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 19195/svnserve
關閉SVN
關閉SVN直接殺進程即可
# kill -9 PID
[root@localhost ~]# kill -9 19195 [root@localhost ~]# [root@localhost ~]# netstat -tunlp | grep 3690 [root@localhost ~]#
或者
# killall svnserve
訪問地址svn://ip/ProjectName省略的svn這個根目錄
輸入密碼進行登陸
連接成功
六、配置Apache的http協議訪問
1、查看httpd是否已經安裝的svn模塊
# ls /etc/httpd/modules/ | grep svn
[root@localhost ~]# ls /etc/httpd/modules/ | grep svn ls: cannot access /etc/httpd/modules/: No such file or directory
如果沒安裝,使用yum安裝
# yum install mod_dav_svn -y
Installed: mod_dav_svn.x86_64 0:1.7.14-14.el7 Dependency Installed: httpd.x86_64 0:2.4.6-89.el7.centos httpd-tools.x86_64 0:2.4.6-89.el7.centos mailcap.noarch 0:2.1.41-2.el7 Complete!
查看mod_dav_svn是否安裝成功
# ls /etc/httpd/modules/ | grep svn
[root@localhost ~]# ls /etc/httpd/modules/ | grep svn mod_authz_svn.so mod_dav_svn.so
2、安裝完成,對svn版本庫下的項目ProjectName進行位置映射
在/etc/httpd/conf.d/文件下創建subversion.conf文件並編輯
# vi subversion.conf
[root@localhost conf.d]# ls autoindex.conf README subversion.conf userdir.conf welcome.conf [root@localhost conf.d]# [root@localhost conf.d]# pwd /etc/httpd/conf.d [root@localhost conf.d]# [root@localhost conf.d]# cat subversion.conf LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so <Location /repos> DAV svn SVNParentPath /home/svn <LimitExcept GET PROPFIND OPTIONS REPORT> AuthType Basic AuthName "Authorization Realm" AuthUserFile /home/svn/svnusers.conf AuthzSVNAccessFile /home/svn/accesspolicy.conf Require valid-user </LimitExcept> </Location>
AuthType #使用基本認證方式,即用戶名、密碼認證
AuthName # 在認證對話框中出現的提示信息
AuthUserFile # 指定存放用戶名信息的文件路徑
AuthzSVNAccessFile # 指定存放用戶訪問路徑信息的文件路徑即設置權限
Require # 限定只有用戶輸入正確的用戶名和密碼后才能訪問該標簽所指向的路徑
3、使用htpasswd創建http登陸的賬戶密碼
# htpasswd -c -m /home/svn/svnusers.conf admin
語法:
htpasswd (選項)(文件)(參數)
選項
-c:創建一個加密文件;只有第一次創建賬戶密碼時使用 -n:不更新加密文件,只將加密后的用戶名密碼顯示在屏幕上; -m:默認采用MD5算法對密碼進行加密; -d:采用CRYPT算法對密碼進行加密; -p:不對密碼進行進行加密,即明文密碼; -s:采用SHA算法對密碼進行加密; -b:在命令行中一並輸入用戶名和密碼而不是根據提示輸入密碼; -D:刪除指定的用戶
svnusers.conf是創建的文件名
admin要創建的可訪問用戶的名字(如我想創建一個asd用戶訪問這個svn項目倉庫,這個username就是asd)
[root@localhost ~]# htpasswd -c -m /home/svn/svnusers.conf admin New password: Re-type new password: Adding password for user admin
按提示輸入兩次密碼,我們就創建了一個可訪問用戶名和密碼。
如果想要新增加用戶abc(第二次添加用戶)
不需要使用-c參數,如果使用的會覆蓋原來的svnusers.conf文件
htpasswd -m /home/svn/ProjectName/conf/accesspwd abc
接着輸入兩次密碼,
繼續增加用戶。。。
或者使用
# htpasswd -mb /home/svn/svnusers.conf username password
-b 使用命令行中的密碼,而不是提示輸入密碼。
例如:
[root@localhost svn]# htpasswd -mb /home/svn/svnusers.conf adminroot cnbigjx Updating password for user adminroot [root@localhost svn]# [root@localhost svn]# htpasswd -mb /home/svn/svnusers.conf cnbilh cnbilh123 Adding password for user cnbilh [root@localhost svn]# htpasswd -mb /home/svn/svnusers.conf cnbilc cnbilc123 Adding password for user cnbilc [root@localhost svn]# htpasswd -mb /home/svn/svnusers.conf cnbiln cnbiln123 Adding password for user cnbiln [root@localhost svn]# htpasswd -mb /home/svn/svnusers.conf cnbilq cnbilq123 Adding password for user cnbilq [root@localhost svn]# htpasswd -mb /home/svn/svnusers.conf cnbimj cnbimj123 Adding password for user cnbimj [root@localhost svn]# htpasswd -mb /home/svn/svnusers.conf cnbishj cnbishj123 Adding password for user cnbishj [root@localhost svn]# htpasswd -mb /home/svn/svnusers.conf cnbiwj cnbiwj123 Adding password for user cnbiwj
你不再繼續創建新用戶,循環結束。
參考:htpasswd 命令
4、創建存放用戶訪問路徑的文件並設置權限
# vi accesspolicy.conf
[root@localhost ~]# cd /home/svn/ [root@localhost svn]# [root@localhost svn]# ls cloud-platform cloud-platform-client cloud-platform-web docs svnusers.conf [root@localhost svn]# [root@localhost svn]# vi accesspolicy.conf [groups] admin = admin [/] *=r @admin = rw [cloud-platform:/] *=rw @admin = rw [cloud-platform-client] *=rw @admin = rw [cloud-platform-web] *=rw @admin = rw [docs] *=rw @admin = rw
5、修改目錄權限進行Apache授權
# chown -R apache:apache /home/svn/
[root@localhost svn]# chown -R apache:apache /home/svn/ [root@localhost svn]# [root@localhost svn]# [root@localhost svn]# ll total 24 -rw-r--r--. 1 apache apache 15795 Jul 3 13:50 accesspolicy.conf drwxr-xr-x. 6 apache apache 86 Jun 22 16:31 cloud-platform drwxr-xr-x. 6 apache apache 86 Jun 22 16:32 cloud-platform-client drwxr-xr-x. 6 apache apache 86 Jun 22 16:32 cloud-platform-web drwxr-xr-x. 6 apache apache 86 Jul 2 17:28 docs -rw-r--r--. 1 apache apache 790 Jul 3 11:50 passwd -rw-r--r--. 1 apache apache 1053 Jul 3 13:35 svnusers.conf
6、重啟Apache的服務
service httpd restart 或者 systemctl restart httpd.service
七、SVN服務器從Windows遷移到LInux
1、現在要使用Linux作為svn服務器,之前是在windows Server 2008上的,用的是VisualSVN, 如下圖所示。
現在svn中有四個項目,需要將這些項目導出到linux環境下
2、導出項目
運行cmd,輸入命令
svnadmin dump D:\Repositories\cloud-platform > E:\backup\cloud-platform.dump
導出cloud-platform項目中的所有文件
可見命令會導出每個版本的詳細信息,保證了之前的歷史信息不會丟失。現在我們便得出備份文件cloud-platform.dump,如下:
利用批處理實現項目的批量導出,編寫svnbak.bat, 雙擊運行,會一次性導出所有項目
svnadmin dump D:\Repositories\cloud-platform > E:\backup\cloud-platform.dump svnadmin dump D:\Repositories\cloud-platform-client > E:\backup\cloud-platform-client.dump svnadmin dump D:\Repositories\cloud-platform-web > E:\backup\cloud-platform-web.dump svnadmin dump D:\Repositories\docs > E:\backup\docs.dump
3、上傳備份文件到Linux並導入備份文件
輸入命令:svnadmin load /home/svn/cloud-platform < /root/cloud-platform.dump,運行結果如下:
八、在linux下使用svn命令
1、說明:
客戶端IP地址:192.168.2.134
svn服務端IP地址:192.168.2.212
2、常用的svn命令
將代碼checkout到當前目錄
簡寫:svn co URL
# svn checkout svn://192.168.2.212/docs
[root@tracker1 opt]# svn checkout svn://192.168.2.212/docs Authentication realm: <svn://192.168.2.212:3690> /home/svn/docs Password for 'root': Authentication realm: <svn://192.168.2.212:3690> /home/svn/docs Username: cnbidjl Password for 'cnbidjl': ----------------------------------------------------------------------- ATTENTION! Your password for authentication realm: <svn://192.168.2.212:3690> /home/svn/docs can only be stored to disk unencrypted! You are advised to configure your system so that Subversion can store passwords encrypted, if possible. See the documentation for details. You can avoid future appearances of this warning by setting the value of the 'store-plaintext-passwords' option to either 'yes' or 'no' in '/root/.subversion/servers'. ----------------------------------------------------------------------- Store password unencrypted (yes/no)? yes
…………………………
……………………………………
……………………………………………………
Checked out revision 1562.
[root@tracker1 opt]#
[root@tracker1 opt]# ls
docs
[root@tracker1 opt]#
將代碼checkout到指定目錄
# svn co URL directory
查看svn版本號
在svn的工作目錄,輸入命令:
# svn info
[root@tracker1 docs]# ls readme.md svn賬號.xls 個人網盤資料 產品部資料 產品項目匯總 工作匯報 部門手冊文檔 [root@tracker1 docs]# [root@tracker1 docs]# svn info Path: . Working Copy Root Path: /opt/docs URL: svn://192.168.2.212/docs Repository Root: svn://192.168.2.212/docs Repository UUID: 347ba001-b9fa-e74f-92c4-0c3f7672eadb Revision: 1562 Node Kind: directory Schedule: normal Last Changed Author: cnbiln Last Changed Rev: 1562 Last Changed Date: 2019-07-03 14:28:39 +0800 (Wed, 03 Jul 2019) [root@tracker1 docs]#
往版本庫中添加新的文件
# svn add file
file是某個文件或者某個目錄,如果添加所有的文件則用點“.”表示。
提交文件到服務器
簡寫:svn ci
svn commit -m “LogMessage“ [-N] [--no-unlock] path(如果選擇了保持鎖,就使用–no-unlock開關)
例如:svn commit -m “add test file for my test” test.php
一般步驟:
- step-1:
svn update
- step-2:
svn add file、svn delete file
- step-3:
svn commit -m “提交文件到遠程服務器”
刪除文件
簡寫:svn (del, remove, rm)
(1)、刪除遠程服務器文件
svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”
(2)、刪除本地文件,然后提交
svn delete test.php, 然后再svn ci -m “delete test file”,推薦使用這種
查看文件詳細信息
svn info path test.php
九、Linux服務器端設置svn開機啟動
[root@svn_server ~]# ls /opt/ docs.dump restart_svn.sh start_svn.sh stop_svn.sh svnusers.sh [root@svn_server ~]# [root@svn_server ~]# [root@svn_server ~]# vi /etc/rc.d/rc.local [root@svn_server ~]# [root@svn_server ~]# [root@svn_server ~]# cat /opt/start_svn.sh #/bin/bash svnserve -d -r /home/svn [root@svn_server ~]# [root@svn_server ~]# cat /opt/stop_svn.sh /bin/bash killall svnserve [root@svn_server ~]# [root@svn_server ~]# cat /opt/restart_svn.sh #/bin/bash killall svnserve svnserve -d -r /home/svn
加入到開機啟動任務
# vi /etc/rc.d/rc.local
[root@svn_server ~]# cat /etc/rc.d/rc.local #!/bin/bash # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES # # It is highly advisable to create own systemd services or udev rules # to run scripts during boot instead of using this file. # # In contrast to previous versions due to parallel execution during boot # this script will NOT be run after all other services. # # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure # that this script will be executed during boot. touch /var/lock/subsys/local /opt/start_svn.sh
參考博客:
https://www.cnblogs.com/taohaijun/p/7172939.html
https://www.cnblogs.com/-mrl/p/8980244.html
Linux下安裝SVN服務端小白教程
https://www.cnblogs.com/liuxianan/p/linux_install_svn_server.html
Centos虛擬機SVN的安裝和使用http方式訪問svn服務器
https://www.cnblogs.com/gne-hwz/p/8563982.html
https://www.cnblogs.com/memphise/articles/6411767.html
SVN服務器從Windows遷移到LInux
https://www.cnblogs.com/lidabo/p/4633152.html