版本控制(四)--mac使用自带svn(命令行)

    前言

      在Mac环境下,由于Mac自带了svn的功能,所以我们可以在不装任何第三方软件的前提下使用svn功能(svn服务器的话不过还需做一下简单的配置)。
      另看到一篇文章(http://benohead.com/mac-os-x-svn-subversion-missing-in-mountain-lion-10-8/)说老版的mac os x系统svn功能集合在xcode中,Preferences > Downloads > Command Line Tools 里面。

       检查系统是否安装了svn,opening a Terminal and typing the following: svn --version

Copyright (C) 2014 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 access (RA) modules are available:

* ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
  - handles 'http' scheme
  - handles 'https' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
  - handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
  - handles 'file' scheme
* ra_serf : Module for accessing a repository via WebDAV protocol using serf.
  - handles 'http' scheme
  - handles 'https' scheme
       可以使用如下命令确定我们的Mac OS系统确实已经安装了svnserve:svnserve --version
svnserve, version 1.7.17 (r1591372)
   compiled Aug  7 2014, 17:03:25

Copyright (C) 2014 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_fs : Module for working with a plain file (FSFS) repository.

     搭建svn服务器

      创建仓库

      1.若你的机器是首次进行svn的搭建创建svn目录。
       在终端中输入:mkdir /Users/username/svn 回车(若有提示,很有可能你的电脑已经存在了svn文件夹,若你不使用,可将其删除再重新运行上面命令)
      2.创建svn repository
      在终端中输入:svnadmin create /Users/username/svn/repository
      3.查看svn repository下的文件(有利于你理解svn)终端中输入:ls/Users/username/svn/repository/ 下面六个文件(README.txt db hooks conf format locks)

       基本配置

        主要是修改/svn/mycode/conf目录下的三个文件:authz passwd svnserve.conf

       1.打开svnserve.conf,将下列配置项前面的#和空格都去掉:

# anon-access = read
……
# auth-access = write
……
# password-db = passwd
……
# authz-db = authz
         anon-access = read代表匿名访问的时候是只读的,若改为anon-access = none代表禁止匿名访问,需要帐号密码才能访问。

        2.打开passwd,在[users]下面添加帐号和密码:

……
[users]
username1 = userpassword
# sally = sallyssecret
……
        3打开authz,配置用户组和权限
……
[groups]
admin = administrator
user = xiayong,zhangsan
[/]
@admin = rw
@user = r
[local:/]
@admin = rw
@user = r
……

       说明:

      1.在[groups]下面添加组名和用户名,多个用户之间用逗号(,)隔开

       2.使用[/]代表svn服务器中的所有资源库,即username/svn/repository目录。

       3.组名前面要用@,如果是用户名,不用加@,比如xiayong这个用户有读写权限[/]  xiayong=rw
       4.[local:/]表示repository目录下local仓库根目录

       4.启动svn服务器

在终端输入下列指令:svnserve -d -r /Users/username/svn
或者输入:svnserve -d -r /Users/username/svn/repository
        没有任何提示,说明启动成功

      5.关闭svn服务器

     如果你想要关闭svn服务器,最有效的办法是打开实用工具里面的“活动监视器”,搜索“svn”,找到svnserve线程,退出即可。

如无特殊说明,以下命令,均是在svn目录下(即workcopy目录)下操作

   服务器端操作

 使用命令:svn ls [sever path],即可查看sever path下的目录了

       1.从本地导入代码到服务器(第一次初始化导入)

svn import /Users/apple/Documents/eclipse_workspace/weibo svn://localhost/mycode/weibo --username=mj --password=123 -m "初始化导入"
     说明:将/Users/apple/Documents/eclipse_workspace/weibo中的所有内容,上传到服务器mycode仓库的weibo目录下,后面双引号中的"初始化导入"是注释;

     *1.import命令中 前者path,后者url,注意linux命令风格,如果前者是一个文件的话,后者url可以是文件或者目录(即使你写的.../direction/结尾,也会认为是文件,导入一个direction的文件)

      *2.import命令中前者path,如果是一个目录的话,那后面一定会当成一个目录

       2.从服务器端下载代码到客户端本地

svn checkout svn://localhost/mycode --username=mj --password=123 /Users/apple/Documents/code
    说明:将服务器中mycode仓库的内容下载到/Users/apple/Documents/code目录中

   使用svn客户端功能

    .版本管理
svn export [-r REV] URL[@PEGREV] [PATH]
svn export [-r REV] PATH1[@PEGREV] [PATH2]
别名:无
描述:导出一个干净的目录树,不包含所有的受控信息。可以选择从URL或WC中导出。
访问库:如果访问的是URL则会。
eg:svn export file:///var/svn/repos my-export   ##导出到my-export目录

添加文件
svn add test.txt 添加单一文件
svn add *.* 添加所有文件
svn add *.php 添加所有后缀为php的文件

提交文件
svn ci -m “描述(可留空)” 文件名 提交单一文件
svn ci -m “描述(可留空)” 提交所有文件

删除文件
svn delete 文件名
简写:svn (del, remove, rm)

加锁/解锁
svn lock -m “LockMessage“ [--force] PATH
svn unlock -m “LockMessage“ [--force] PATH

svn update,简写 svn up
svn update 更新所有文件
svn update -r 200 test.php (将版本库中的文件test.php还原到版本200)
svn update test.php (更新单一文件,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)

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

svn revert 本地修改回滚:
svn revert [-R] sth
其中sth可以是(目录或文件的)相对路径也可以是绝对路径。
当sth为单个文件时,直接svn revert sth就行了;当something为目录时,需要加上参数-R(Recursive,递归),否则只会将something这个目录的改动。
在这种情况下也可以使用svn update命令来取消对之前的修改,但不建议使用。因为svn update会去连接仓库服务器,耗费时间。
注意:svn revert本身有固有的危险,因为它的目的是放弃未提交的修改。一旦你选择了恢复,Subversion没有方法找回未提交的修改。

svn resolved PATH...
别名:无
描述:将冲突的文件标记为已解决,并且删掉冲突产生的临时文件。注意这个命令并不是能把冲突解决,解决冲突还是得靠人工。

查看文件详细信息
svn info 文件名

查看日志
svn log 文件名

svn status [path]其字符的含义如下:
简写:svn st

查看差异
svn diff(di) path
例如:svn diff test.php(本地修改差异)
svn diff -r m:n path(对版本m和版本n比较差异)

      各命令说明:

1.后面大多接path(直接文件名就是当前目录下文件)

2.svn info不带路径,也可以查看该workcopy的各种信息,包括仓库url等信息;

3.检查workcopy修改,常用svn status浏览所做的修改,通过svn diff检查修改的详细信息。另,这俩个命令和svn revert都可以在没有网络的情况下使用;

4.冲突的解决:冲突发生时,subversion会在当前工作目录中保存所有的目标文件版本{上次更新版本、当前获取的版本(即别人提交的版本)、自己更新的版本、目标文件}

conflict.txt.r101 //服务器上初始版本(head)
conflict.txt.r102 //别人在你之前提交的版本
conflict.txt.mine //自己修改后准备提交的版本(work copy)
conflict.txt      //自动合并了你的版本和别人提交的版本形成的(其中用<<<<<、======、>>>>>等符号标记出了自动合并的部分(合并后的work copy)
      三种方式解决冲突:

       A、放弃自己的更新,使用svn revert(回滚),然后提交。在这种方式下不需要使用svn resolved(解决);
       B、放弃自己的更新,使用别人的更新。使用最新获取的版本覆盖目标文件,执行resolved filename并提交。

$ svn update
C  sandwich.txt
Updated to revision 2.
$ ls sandwich.*
sandwich.txt  sandwich.txt.mine  sandwich.txt.r2  sandwich.txt.r1
$ cp sandwich.txt.r2 sandwich.txt
$ svn resolved sandwich.txt
      C、手动解决:冲突发生时,通过和其他用户沟通之后,手动更新目标文件。然后执行resolved filename来解除冲突,最后提交。

5.代码回滚:

       A.第一种情况:改动没有被提交(commit)。这种情况下,使用svn revert就能取消之前的修改。详见上文命令解释;
       B.第二种情况:改动已经被提交(commit)。这种情况下,用svn merge命令来进行回滚。
1. svn update,svn log,找到最新版本(latest revision)
2. 找到自己想要回滚的版本号(rollbak revision)
3. 用svn merge来回滚: svn merge -r : something
        eg:

//1.保证我们拿到的是最新代码:
svn update  //假设最新版本号是28。
//2.然后找出要回滚的确切版本号:
svn log [something] //假设根据svn log日志查出要回滚的版本号是25,此处的something可以是文件、目录或整个项目
//如果想要更详细的了解情况,可以使用svn diff -r 28:25 [something]
//3.回滚到版本号25:
svn merge -r 28:25 something  //为了保险起见,再次确认回滚的结果:
svn diff [something] //发现正确无误,提交。
//4.提交回滚:
svn commit -m "Revert revision from r28 to r25,because of ..."
//提交后版本变成了29。

6.文件夹操作

        svn中添加/删除文件夹  跟 文件不一样,对于文件操作相对简单一点。如上文所讲,添加/删除文件的话,svn st,出现A/D flag ,svn ci提交即可。而文件夹删除/添加后会出现?或者!的flag ,先得svn add 或者delete命令之后,再svn ci 命令提交

        文件夹添加操作

        方法一:先添加单独的文件夹,这时svn st,文件夹出现?flag,之后使用svn add命令,将文件夹添加到svn,在svn ci。之后在往文件夹添加文件等操作。

        方法二:将文件夹和里面的文件一起添加到workcopy中去,待测试?

        文件夹删除操作:

        在xcode项目中删除文件夹不同于删除文件,删除文件夹后,磁盘上还存在,在磁盘上删除后,svn st 显示“!”,使用svn delete 命令之后,在ci。

----------------------------------------

参考:

http://blog.csdn.net/zjl201309/article/details/14051271 :Mac下搭建svn服务器教程(终端与 Xcode的使用)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值