zoukankan      html  css  js  c++  java
  • Centos7搭建SVN及配置

    一、SVN简介

    1.1、简介

    Subversion(SVN) 是一个开源的版本控制系統, Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库(repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。

    1.2、相关概念

    • repository(源代码库):源代码统一存放的地方

    • Checkout(提取):当你手上没有源代码的时候,你需要从repository checkout一份

    • Commit(提交):当你已经修改了代码,你就需要Commit到repository

    • Update (更新):当你已经Checkout了一份源代码, Update一下你就可以和Repository上的源代码同步,你手上的代码就会有最新的变更

    二、SVN安装及配置

    参考文档:https://blog.csdn.net/qq_33722172/article/details/84144400

    1)yum 安装svn

    [root@svn ~]# yum -y install subversion
    #查看版本
    [root@svn ~]# 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.

    2)创建版本库目录及版本库

    [root@svn ~]# mkdir -p /var/svn/svnrepos/
    [root@svn ~]# svnadmin create /var/svn/svnrepos/svn-test  #创建版本库
    [root@svn ~]# cd /var/svn/svnrepos/svn-test
    [root@svn svn-test]# ll
    total 8
    drwxr-xr-x 2 root root  54 Nov  6 20:50 conf
    drwxr-sr-x 6 root root 233 Nov  6 20:50 db
    -r--r--r-- 1 root root   2 Nov  6 20:50 format
    drwxr-xr-x 2 root root 231 Nov  6 20:50 hooks
    drwxr-xr-x 2 root root  41 Nov  6 20:50 locks
    -rw-r--r-- 1 root root 229 Nov  6 20:50 README.txt
    [root@svn svn-test]# cd conf/
    [root@svn conf]# ll
    total 12
    -rw-r--r-- 1 root root 1080 Nov  6 20:50 authz          #负责账号权限的管理,控制账号是否读写权限
    -rw-r--r-- 1 root root  309 Nov  6 20:50 passwd         #负责账号和密码的用户名单管理
    -rw-r--r-- 1 root root 3090 Nov  6 20:50 svnserve.conf  #svn服务器配置文件

    3)编辑svnserve.conf

    [root@svn conf]# vim svnserve.conf
    anon-access = none    #匿名访问的权限,可以是read,write,none,默认为read
    auth-access = write   #使授权用户有写权限
    password-db = passwd  #密码数据库的路径
    authz-db = authz      #访问控制文件

    4)编辑authz文件

    [root@svn conf]# vim authz
    ....
    [groups]
    # harry_and_sally = harry,sally
    # harry_sally_and_joe = harry,sally,&joe
    admin = lawrence   #添加组
    
    # [/foo/bar]
    # harry = rw
    # &joe = r
    # * =
    
    # [repository:/baz/fuz]
    # @harry_and_sally = rw
    # * = r
    [svn-test:/]  #版本库
    @admin = rw   #读写权限

    image

    5)编辑passwd文件

    [root@svn conf]# vim passwd
    [users]
    # harry = harryssecret
    # sally = sallyssecret
    lawrence = 123456

    6)启动,查看端口进程

    [root@svn conf]# svnserve -d -r /var/svn/svnrepos
    [root@svn conf]# ps -ef|grep svn
    root      61898      1  0 21:06 ?        00:00:00 svnserve -d -r /var/svn/svnrepos
    root      61900  61105  0 21:06 pts/1    00:00:00 grep --color=auto svn
    [root@svn conf]# netstat -lntp|grep svn
    tcp        0      0 0.0.0.0:3690            0.0.0.0:*               LISTEN      61898/svnserve

    7)使用TortoiseSVN客户端访问

    image

    image

    image

    在linux上登录时这样子的:

    image

    三、SVN相关命令

    3.1、svn  checkout  path

    svn checkout svn://10.0.0.201/svn-test
    svn co svn://10.0.0.201/svn-test  #简写

    3.2、svn  checkout  path  subv

    把你的工作拷贝放到subv而不是和前面那样放到trunk

    3.3、svn  add  file

    file是某个文件或者某个目录,如果添加所有的文件则用点“.”表示。

    svn add file
    例如:svn add test.php
    svn  add  *.php(添加当前目录下所有的php文件)
    svn add . (表示添加所有文件)
    ------------------------------------------------------------
    
    [root@svn ~]# cd svn-test/
    [root@svn svn-test]# echo aaa > test.txt
    [root@svn svn-test]# svn add test.txt 
    A         test.txt
    [root@svn svn-test]# echo bbb > b.txt
    [root@svn svn-test]# svn add .
    svn: warning: W150002: '/root/svn-test' is already under version control
    svn: E200009: Could not add all targets because some targets are already versioned
    svn: E200009: Illegal target for the requested operation
    [root@svn svn-test]# svn status  #查看状态
    ?       b.txt
    A       test.txt
    [root@svn svn-test]# svn add b.txt 
    A         b.txt
    [root@svn svn-test]# svn status
    A       b.txt
    A       test.txt

    3.4、svn  lock

    #加锁/解锁命令。
    svn lock -m "LockMessage" [--force] path
    例如:svn lock -m “lock test file”  test.php
    svn unlock path

    3.5、svn  update

    #更新版本命令。
    svn update -r m path
    
    例如:
    svn update 后面没有目录,默认更新当前目录及子目录的所有文件到最新版本。
     svn update -r 200 test.php (将版本库中的文件test.php还原到版本200)
    简写:svn up
    
    update命令还可以进行文件恢复。
    (1)不小心写错了很多东西,想撤销所写的东西(已经把修改提交到服务器)
    svn update -r 版本号
    (2)不小心删错了文件,想把文件恢复回来(已经把删除提交到服务器)
    svn update -r 版本号

    3.6、svn  status

    svn status -v path
    svn status path
    简写:svn st
    ------------------------------
    [root@svn svn-test]# svn status 
    ?       c.txt
    [root@svn svn-test]# svn status -v ./*
                     1        1 lawrence     b.txt
    ?                                        c.txt
                     1        1 lawrence     test.txt
    --------------------------------------
    显示文件和子目录的状态。
    第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
    注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
    
    文件状态描述:
    A 被添加到本地代码仓库
    ''没有修改
    C 冲突
    D 被删除
    I 被忽略
    M 被修改
    R 被替换
    X 外部定义创建的版本目录
    ? 文件没有被添加到本地版本库内
    !文件丢失或者不完整(不是通过svn命令删除的文件)
    ~ 受控文件被其他文件阻隔
    

    3.7、svn  delete

    svn delete path -m “delete test file”
    例如:
    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 (del, remove, rm)

    3.8、svn  log

    [root@svn svn-test]# svn log test.txt 
    ------------------------------------------------------------------------
    r1 | lawrence | 2019-11-06 21:54:05 +0800 (Wed, 06 Nov 2019) | 1 line
    
    add file
    ------------------------------------------------------------------------
    
    #查看一段日期的日志
    svn log -r {2018-07-03}:{2018-07-09}
    
    #显示某一版本范围的log列表
    #显示从r199687到r199385范围的所有带jaspersong字符串的log
    svn log -r r103546:r104414 | grep -A 2 jaspersong
    #这里说明一下grep -A 2 "jasper"|中A后面数字的差别,不同的数字表示显示的log版本信息不同的行数。
    
    #查看某一版本所修改的文件列表及说明,此命名用得比较多。
    svn log -r r196674 -v
    
    #查找分支所有的修改
    svn log -v --stop-on-copy $URL

    3.9、svn  info  path

    [root@svn svn-test]# svn info test.txt 
    Path: test.txt
    Name: test.txt
    Working Copy Root Path: /root/svn-test
    URL: svn://10.0.0.201/svn-test/test.txt
    Repository Root: svn://10.0.0.201/svn-test
    Repository UUID: 66b9f439-5010-441e-8e9b-53af2df44b87
    Revision: 1
    Node Kind: file
    Schedule: normal
    Last Changed Author: lawrence
    Last Changed Rev: 1
    Last Changed Date: 2019-11-06 21:54:05 +0800 (Wed, 06 Nov 2019)
    Text Last Updated: 2019-11-06 21:46:14 +0800 (Wed, 06 Nov 2019)
    Checksum: 972a1a11f19934401291cc99117ec614933374ce

    3.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
    --------------------------------------------
    
    [root@svn svn-test]# echo ccc >> test.txt 
    [root@svn svn-test]# svn commit -m "modify test.txt" test.txt 
    Sending        test.txt
    Transmitting file data .
    Committed revision 2.
    [root@svn svn-test]# svn log test.txt 
    ------------------------------------------------------------------------
    r2 | lawrence | 2019-11-06 22:28:32 +0800 (Wed, 06 Nov 2019) | 1 line
    
    modify test.txt
    ------------------------------------------------------------------------
    r1 | lawrence | 2019-11-06 21:54:05 +0800 (Wed, 06 Nov 2019) | 1 line
    
    add file
    ------------------------------------------------------------------------
    [root@svn svn-test]# svn diff test.txt 
    [root@svn svn-test]# svn diff -r 2:1 test.txt 
    Index: test.txt
    ===================================================================
    --- test.txt	(revision 2)
    +++ test.txt	(revision 1)
    @@ -1,2 +1 @@
     aaa
    -ccc

    3.11、svn  merge  -r  m:n  path

    #Linux命令行下将两个版本之间的差异合并到当前文件。
    svn merge -r m:n path
    svn merge -r 200:205 test.php #将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下。

    3.12、svn  help

    #Linux命令行下SVN 帮助。
    svn help ci

    3.13、svn  list  path

    #显示path目录下的所有属于版本库的文件和目录。
    #简写:svn ls
    
    [root@svn svn-test]# svn status
    A       c.txt
    A       nn.txt
    [root@svn svn-test]# svn ls
    b.txt
    test.txt

    不太常用命令:

    参考文档:

    https://www.cnblogs.com/jaspersong/p/9277720.html

    https://www.runoob.com/svn/svn-tutorial.html

  • 相关阅读:
    Python源码阅读(一、环境准备)
    PDF ITextSharp
    模式对话框 打开文件
    MongoDB 最初级步骤
    DataGrid中取HyperLinkColumn列的值,处理DataGrid中绑定的特殊字符
    oracle 将科学计数法数据转换为非科学计数法数据
    Eval 表达式 GridView ItemCommand
    回车,根据编码获取相应记录,然后再将这录绑定到AutoList
    MongoDB 日期 插入时少8小时
    日期给空值
  • 原文地址:https://www.cnblogs.com/hujinzhong/p/11806892.html
Copyright © 2011-2022 走看看