一.  svn服务器的搭建

鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人

本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总结

/******开始*********/

系统环境:Centos 6.5

第一步:通过yum命令安装svnserve,命令如下:

>yum -y install subversion

此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行

若需查看svn安装位置,可以用以下命令:

>rpm -ql subversion

第二步:创建版本库目录(此仅为目录,为后面创建版本库提供存放位置)

选择在var路径下创建版本库,当前处于根目录下,一次性创建如下:

>mkdir /var/svn/svnrepos

第三步:创建svn版本库

在第二步建立的路径基础上,创建版本库,命令如下:

>svnadmin create /var/svn/svnrepos/xxxx   (xxxx为你预期的版本库名称,可自定义)

创建成功后,进入xxx目录下

>cd /var/svn/svnrepos/xxxx

进入目录,可以看见如下文件信息:


tortoisesvn 创建远程分支_centos

第四步:配置修改

进入已经创建好的版本库目录下,也就是前文说创建的xxxx

进入conf

>cd /var/svn/svnrepos/xxxx/conf

conf目录下,一共存放三份重要的配置文件,如下:

tortoisesvn 创建远程分支_centos_02

 

authz:负责账号权限的管理,控制账号是否读写权限

passwd:负责账号和密码的用户名单管理

svnserve.conf:svn服务器配置文件

细节修改如下:(希望大家严格按照以下信息,不用参考网络上其他资料)

修改authz文件信息,如下:

>vi authz

在文件内容的末尾,添加如下:

tortoisesvn 创建远程分支_tortoisesvn 创建远程分支_03

 

只需在末尾添加,无需在文件其他部分修改和添加任何东西(请忽略groups被我马赛克的地方,那其实也是条无用的记录,我忘记删掉而已),末尾内容如下:

[\]

账号1 = rw

账号2 = rw

。。。。。

rw表示赋予此账号可读写的权限,请注意[]中的斜杠,一定是反斜杠,有些教程说,需添加版本库名称在括号内,我直接建议就这写,这样写允许访问的权限更大,避免一些错误

修改passwd文件信息

>vi passwd

账号密码文件无需做修改,也是直接将账号和密码信息追加到文件中即可,注意格式为:

账号 = 密码

例如:admin = 123456

修改svnserve.conf(重要)

vi svnserve.conf

原始文件内容,都被注释掉的,我们只需要去掉4条指定内容前注释即可,如下:

tortoisesvn 创建远程分支_版本库_04

 注:这些配置应顶格,首字母前不能有空格

大多数网络资料,都会让大家将authz-db = authz这条给去掉注释,经过我本人多次被坑经验,此条去掉后,虽然svn服务器可以连接,但一直会提示“认证失败”,注释掉即可正常

还有多数资料会让大家在realm = My First Repository处填写服务器ip,经过测试,填写后并无什么用处,所以大家去掉注释即可,无需做任何修改

到此,配置已经全部完成,账号信息已经添加成功

第五步,启动svn服务器

在根目录下,执行如下命令:

>svnserve -d -r /var/svn/svnrepos

启动成功后,可用ps -aux查看服务启动是否成功

七:客户端访问svn服务器,可分为windows及linux

在windows客户端,输入地址:svn://ip地址/xxxx   (iP地址为你linux的ip,xxxx为前文创建的版本库名称),弹出输入用户名和密码,输入即可访问

二.  linux下的客户端命令


1、将文件checkout到本地目录


svn checkout path(path是服务器上的目录)
   例如:svn checkout svn: // 192.168 . 1.1 / pro / domain
    简写:svn co


2、往版本库中添加新的文件


svn  
 add 
   
 file 
 
    例如:svn  
 add 
  test.php(添加test.php)
    svn  
 add 
   
 * 
 .php(添加当前目录下所有的php文件)


   注: 可添加单个文件及文件夹均可


3、将改动的文件提交到版本库


 

svn commit -m "LogMessage" [-N] [--no-unlock] PATH(如果选择了保持锁,就使用--no-unlock开关)
    例如:svn commit -m "add test file for my test" test.php
     简写:svn ci

    注意: -m及注释是必须项,可提交单个文件及文件夹


4、加锁/解锁


svn lock -m  
 " 
 LockMessage 
 " 
   
 [ 
 --force 
 ] 
  PATH 
 
    例如:svn lock -m  
 " 
 lock test file 
 " 
  test.php
svn unlock PATH


5、更新到某个版本


  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


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:// 
 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)


8、查看日志


  svn log path
   例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化


9、查看文件详细信息


  svn info path
   例如:svn info test.php


如上述操作后,svn info结果为

$ svn info svn://119.x.x.x/wProject
 Path: wProject
 URL: svn://119.x.x.x/wProject
 Repository Root: svn://119.x.x.x/wProject
 Repository UUID: f8d9e363-8a08-4b6e-a352-81874b60075f
 Revision: 4
 Node Kind: directory
 Last Changed Author: xxx
 Last Changed Rev: 4
 Last Changed Date: 2017-05-31 20:38:17 +0800

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:
用法: 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 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)




三. 其它事项

1. 把文件上传到SVN版本库后,上传的文件不再以文件原来的格式存储,而是被svn以它自定义的格式压缩成版本库数据,存放在版本库中。仓库里面是看不到的,只有把它check out 出来才行


摘抄



参考