centOS搭建SVN服务器实现权限控制及linux与windows客户端的使用、排错

人盡茶涼 提交于 2019-12-08 12:47:07

目录

1.在centOS上搭建svn_server

2.svn启动与发布的简单排错

3.ACL权限控制


1.在centOS上搭建svn_server

1.查询是否已安装软件包及安装软件包 

rpm -qa subversion                        #查询是否安装
yum -y install subversion                 #svn服务器有subversion提供

2.查看安装版本 

svnserve --version

3.创建SVN版本库目录 

mkdir -p /var/svn/

使用单仓库

  • svnadmin create /var/svn/project		//创建共享的文件夹 project文件夹自动生成

       

  • 修改配置文件,创建账户与密码
  • [root@gui ~]# vim /var/svn/project/conf/svnserve.conf
    			[general]
    			### These options control access to the repository for unauthenticated
    			### and authenticated users.  Valid values are "write", "read",
    			### and "none".  The sample settings below are the defaults.
    			anon-access = none		#匿名无任何权限  注意去掉空格
    			auth-access = write     #有效账户可写
    			### The password-db option controls the location of the password
    			### database file.  Unless you specify a path starting with a /,
    			### the file's location is relative to the directory containing
    			### this configuration file.
    			### If SASL is enabled (see below), this file will NOT be used.
    			### Uncomment the line below to use the default password file.
    			password-db = passwd     #定义密码文件
    			### The authz-db option controls the location of the authorization
    			### rules for path-based access control.  Unless you specify a path
    			### starting with a /, the file's location is relative to the the
    			### directory containing this file.  If you don't specify an
    			### authz-db, no path-based access control is done.
    			### Uncomment the line below to use the default authorization file.
    			authz-db = authz        #ACL访问控制列表文件
    [root@gui ~]# vim /var/svn/project/conf/passwd 
    			… …
    			[users]
    			harry = pass            #用户名和密码
    			tom = pass              #用户名和密码
    [root@gui ~]# vim  /var/svn/project/conf/authz 
    			[/]                     #定义用户访问目录及权限
    			harry = rw              #用户对项目根路径可读可写
    			* = r                   #其他人只读
  • 启动服务
  • svnserve -d  -r /var/svn/project      #只发布project一个目录共享  客户端访问不用绝对路径
    netstat -nutlp |grep svnserve         #查看服务是否启动  默认3690端口
    tcp        0      0 0.0.0.0:3690       0.0.0.0:*               LISTEN      89809/svnserve
  • 导入测试数据
  • cd /usr/lib/systemd/system/        #我的是centOS7系统   你们随便找个目录同步就行了
    
    svn import . file:///var/svn/project/ -m "Init Data"	
    //Init Data  标示导入的文件  把“.”当前的所有文件导入到共享文件夹file:///var/svn/project/
    
    du -sh /var/svn/project/		//查看大小   是否导入成功
    608K    /var/svn/project/
  • 客户端测试
  • linux客户端测试、将服务器上的代码下载到本地
  • svn --username harry --password pass co svn://IP地址/ code
                #建立本地副本,从服务器上co下载代码到本地并创建code目录
    			ATTENTION!  Your password for authentication realm:
    			   <svn://127.0.0.1:3690> b72f45f0-bbe5-4a0c-ad4a-37f52704f0b1
    			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    #提示是否保存密码
    
    ls  code            #会看到代码库的文件
  • windows客户端测试
  • 官网下载链接https://tortoisesvn.net/downloads.html
  • 下载中文语言包
  • 安装完之后设置语言包(语言包一定要和安装软件包对应)
  • 检出代码库(进入新建目录——点击右键——选择SVN检出)
  • 最后会讲排错

多仓库的使用

  • 多仓库的使用是现在大多数企业用到的,一个服务器对应多个项目
  • 这里与单用户有点不同的地方就是访问与发布的都是根目录,访问也必须使用绝对路径
  • 安装软件(如上)
  • 创建SVN版本库目录
  • mkdir /var/svn            #这里把/var/svn当作svn的根路径
  • 创建多仓库
  • svnadmin create /var/svn/testSVN            #创建多仓库
    svnadmin create /var/svn/project
    svnadmin create /var/svn/blog
  • 修改配置文件,创建账户与密码(如上修改三个配置文件,注意是三个目录)
  • 启动多版本仓库目录
  • svnserve -d -r  /var/svn            #这里只发布根路径跟上面不同
    

     

  • 测试访问(要在你的IP地址后面跟上你的仓库名、用绝对路径访问
  • svn --username harry --password pass co svn://IP地址/project code
    
  • 多版本就讲到这里了

2.svn启动与发布的简单排错

  1. 启动报错
    svnadmin create /var/svn/testSVN 
    svnserve -d  -r /var/svn/testSVN           #发布单仓库报错  
    svnserve: E000098: Cant bind server socket: Address already in use 
    //提示已经有服务在使用
     
    pkill -9 svnserve                          #使用pkill强制杀死服务   注意不是svnserver
    svnserve -d  -r /var/svn/testSVN           #可以创建

     

  2. 使用systemctl启动报错
    systemctl restart svnserve.service             #使用systemd方式报错
    Job for svnserve.service failed because the control process exited with error code. See "systemctl status svnserve.service" and "journalctl -xe" for details.
    
    这里要讲到服务默认启动的是哪个目录
    
    vim  /etc/sysconfig/svnserve            #打开svn服务器的配置文件
    
    # OPTIONS is used to pass command-line arguments to svnserve.
    # 
    # Specify the repository location in -r parameter:
    OPTIONS="-r /var/svn"         #默认启动的是这个目录   现在知道我为什么把这个当成根目录了吧 
    ~                         
    
    pkill -9 svnserve
    systemctl restart svnserve.service         #启动无报错        可以更改默认启动目录
    

     

  3. URL报错
    svn --username harry --password pass co svn://192.168.1.1/ code
    svn: E210005: Unable to connect to a repository at URL 'svn://192.168.182.132'
    svn: E210005: No repository found in 'svn://192.168.182.132'
    
    
    1.检查用户名及密码
    2.检查仓库路径是否写对
    3.防火墙是否开放3690端口
    4.大兄弟长点心吧
    5.svn的命令是要装subversion包

     

3.ACL权限控制

  • 创建一个空的仓库
  • svnadmin create /var/svn/testSVN 
    svnserve -d  -r /var/svn/testSVN 
  • 配置用户密码及权限
  • 如果是多仓库可以把配置文件放在你的根目录下
  • [root@gui conf]# cp authz /var/svn/
    [root@gui conf]# cp passwd /var/svn/
    [root@gui conf]# vim svnserve.conf 
    [root@gui conf]# pwd 
    /var/svn/testSVN/conf
    
    多仓库配置
    vim /var/svn/passwd        #用户管理
    [users]
    # harry = harryssecret
    # sally = sallyssecret
    test = 123456
    test1 = 123456
    test2 = 123456
    test3 = 123456
    test4 = 123456
    test5 = 123456
    test6 = 123456
    
    vim /var/svn/authz         #用户控制
    [aliases]
    # joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
    
    [groups]
    # harry_and_sally = harry,sally
    # harry_sally_and_joe = harry,sally,&joe
    admin = test,test1            #定义admin组
    ooxx = test,test2,test3      
    
    [testSVN:/]                   #定义testSVN仓库的根目录的权限
    @admin = rw                   #admin组成员对根目录有读写权限
    @ooxx = r                     #ooxx组成员对根目录只读
    * = r                         #其他人只读
    
    [testSVN:/test]               #定义testSVN仓库下的test目录权限控制   可以使用test/*
    @admin = rw                   #admin组对testSVN仓库下的test目录有读写权限
    @ooxx = r
    * = r
    
    [project:/]                   #定义project仓库的根目录的权限
    test4 = rw
    * = r
    
    [/]                           #定义所有仓库根目录的权限
    * = r                         #所有人只读
  • 客户端连接
  • svn --username test --password 123456 co svn://192.168.182.132/testSVN   testSVN
    
    用户名  test  密码 123456  co  检出代码     IP及仓库名   放在testSVN这个目录
    
    
  • 服务端添加目录
  • Linux客户端添加目录
  • svn mkdir subdir                     #创建子目录
    mkdir ooxx                           #创建自定义目录
    svn add ooxx                         #添加到版本控制
    svn  ci  -m  “new ooxx”              #提交代码   -m是强制的   注释   第一次可能不需要
  • windows客户端添加目录

  • Subversion官方文档:

  • http://svnbook.red-bean.com/en/1.7/svn.serverconfig.httpd.html#svn.serverconfig.httpd.authz.perdir

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!