一、基本使用

1. 常用基础命令

  • svn checkout : 将服务器代码完整的下载到本地
  • svn commit : 将本地修改的内容(可运行版本),提交到服务器
  • svn update : 将服务器最新的代码下载带本地

基本流程

2. SVN使用环境

  • 要想利用SVN管理源代码,必须得有2套环境:
  • 服务器:
    1. 用于存储客户端上传的源代码
    2. 可以在Windows上安装Visual SVN Server
    3. 大部分情况下,公司的开发人员不必亲自搭建SVN服务器
  • 客户端
    1. 上传本地的源代码到服务器,或者更新服务器的代码到本地,保持同步
    2. 可以在Mac上使用命令行、Cornerstone、Xcode、Versions
    3. 开发人员就属于客户端这个角色

二、服务器端配置:Mac版

svn –version 查看本地SVN版本,没有则需要安装

brew install subversion:SVN安装

1. 创建代码仓库:用来存储客户端所上传的代码

  • 创建svn目录:

    1. 使用终端或者直接在Finder中创建想要存放svn的路径,比如在当前用户目录下新建,以后可以在svn目录下创建多个仓库目录: mkdir svn
    2. svnadmin create /Users/你的MAC电脑的用户名/svn/projectName

    不能在“/Users/用户名/别的文件夹”下面建立“/svn”,否则localhost会识别不出来,在“/Users/用户名下”建立“/svn”,再在“/svn”下建立svn库,就可以识别

2. 配置svn的用户权限

  • 配置读写权限

    用文本编辑器,打开svn/conf/svnserve.conf,将下列配置项前面的#和空格都去掉

    • anon-access = read: 表示匿名访问的时候是只读的;改为anon-access = none,禁止匿名访问,需要帐号密码才能访问;控制非鉴权用户访问版本库的权限,取值范围为 “write”、”read” 和 “none”。 即 “write” 为可读可写,”read” 为只读,”none” 表示无访问权限,默认值:read

    • auth-access = write: 控制鉴权用户访问版本库的权限。取值范围为 “write”、”read” 和 “none”。 即”write”为可读可写,”read”为只读,”none”表示无访问权限,默认值:write

    • password-db = passwd:访问方式密码

    • authz-db = authz:指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。 除非指定绝对路径,否则文件位置为相对conf目录的相对路径,默认值:authz。

  • 添加用户

打开目录下的svn/conf/passwd文件,在[users]下面添加用户和密码,等号左边是用户名,右边是密码,需要添加新用户,就另起一行

add new user

  • 配置用户组和权限

打开目录下的svn/conf/authz文件,将在passwd里添加的用户分配到不同的用户组,方便管理权限。

  1. 分组:在[groups]下面添加组名和用户名,多个用户之间用逗号(,)隔开,同样等号左边是组名,右边是用户名

groups

2 .分组权限配置:使用[/]代表svn服务器中的所有资源库

分组权限控制

  • 启动svn服务器

svnserve -d -r /Users/albertyuan/svn/prectice :-r直接指定到版本库(称之为单库svnserve方式)

svnserve -d -r /Users/albertyuan/svn :指定到版本库的上级目录(称之为多库svnserve方式)

可以在mac系统自带的实用工具里面的“活动监视器”查看svn启动状态

SVN服务器启动状态查看

3. 客户端链接服务器配置

启动svn

  • 在终端输入下列指令:svnserve -d -r /Users/你电脑的用户名/svn

  • 打开Cornerstone,点击Add Repository,如下:

    connerStone链接配置

4. 在SVN中存放代码

.在代码库中,新建文件夹,在cornersotone的空白处右击,出现如下信息:

弹窗中,输入文件夹名称,勾选表示创建trunk,branches,tags路径,不勾选什么都不会创建

填写修改日志后,continue

这样,文件夹就建好了。此时我们就可以往svn上传项目了。


三、svn客户端操作命令简介

  • svn checkout :下载服务器的代码到本地 (简写svn co

svn checkout https://192.168.1.106/svn/Weibo/ /Users/Documents/workspace

  • 第一段路劲代表的是:代码仓库的远程地址
  • 第二段路劲代表的是:将代码下载到本地的哪个路径
  • 如果省略第二段路径,就下载到命令行当前所在的路径
  • svn commit :将改动的文件提交到服务器(简写svn ci

svn commit -m “修改了User.m文件” /Users/Desktop/workspace/Weibo/branches/User.m

  • 路径代表的是:提交哪个文件到服务器
  • 如果省略路径,就将命令行所在路径中所有改动过的文件提交到服务器
  • svn update :更新服务器的代码到本地 (简写svn up

    • 将文件恢复回退至某个版本: svn update -r 版本号 [PATH]

      1. 假设服务器版本是7,但是有问题(上传错误文件了),可以回退到第6个版本(确保回退版本是所需的版本):svn update -r6
      2. 本地更新到最新的版本(提高本地版本号,解决版本过低无法上传问题,但此时会存在有问题的文件):svn update
      3. 问题文件合并,格式固定:目标版本文件回退合并到指定版本的文件,解决有问题的文件:svn merge -r7:6 xxxxx.h
  • svn add :向本地的版本控制库中添加新文件

如果直接提交一个没有添加到本地版本控制库中的文件,会报下面的错误:lis not a working copy

  • svn delete、svn remove :从本地的版本控制库中删除文件(简写svn del、svn rm

    • 将文件从本地的版本控制库中移除:svn delete PATH 、svn remove

    • 提交刚才的删除操作到服务器:svn commit

  • svn move :移动文件或者目录或文件更名

  • svn mkdir :创建纳入版本控制下的新目录

  • svn revert :撤销之前的一切修改

  • svn merge :将两个版本之间的差异合并到当前文件

  • svn info :查看文件的详细信息

  • svn diff :查看不同版本的区别

  • svn log :查看日志信息

  • svn list :列出版本库下的文件和目录列表

  • svn status :查看文件状态(简写svn st

    ? :不在SVN的管理之下

    A: 该文件新增并在SVN的管理之下,但是该文件在本地还没有上传到服务器中

    M : 该文件在本地已经修改,未上传到服务器

    D: 该文件本地已删除,但服务器依然存在,删除操作为同步到服务器中

  • svn help :获取帮助信息(比如svn help ci)

  • svn lock :加锁

  • svn unlock :解锁

使用问题总结:
  • 去到公司的第一天,下载公司的代码到电脑上 : svn checkout

  • 修改了某个早已存在的旧文件,然后提交到服务器: svn commit

  • 提交一个自己新建的文件到服务器: svn add à svn commit

  • 删除一个早已存在的旧文件,然后同步到服务器上: svn delete à svn commit

  • 将其他同事提交的新代码更新到自己电脑上: svn update

  • 版本回退

    • 不小心写错了很多东西,想撤销所写的东西(还未把修改提交到服务器): svn revert path需要回退的文件路劲
    • 不小心删错了文件,想把文件恢复回来(还未把删除提交到服务器): svn revert
    • 不小心写错了很多东西,想撤销所写的东西(已经把修改提交到服务器): svn update -r 版本号
    • 不小心删错了文件,想把文件恢复回来(已经把删除提交到服务器): svn update -r 版本号

注意:.svn这个隐藏目录记录着非常关键的信息;千万不要手工修改或删除这个 .svn隐藏目录和里面的文件! 否则将会导致本地的工作副本被破坏,无法再进行操作


四、客户端软件使用:Cornerstone


五、与Xcode的集成使用