版本控制(四)--mac使用自带svn(命令行)
2014-12-12 16:54
495 查看
前言
在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 WebD*** 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 WebD*** 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 = authzanon-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.txtC、手动解决:冲突发生时,通过和其他用户沟通之后,手动更新目标文件。然后执行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的使用)
相关文章推荐
- 【吐血整理】SVN命令行,Subversion的正确使用姿势,让版本控制更简单~
- 【吐血整理】SVN命令行,Subversion的正确使用姿势,让版本控制更简单~
- mac中android studio使用svn版本控制遇到的坑及问题解决
- Android Studio 使用SVN进行版本控制 MAC版
- 【吐血整理】SVN命令行,Subversion的正确使用姿势,让版本控制更简单~
- 【吐血整理】SVN命令行,Subversion的正确使用姿势,让版本控制更简单~
- 【吐血整理】SVN命令行,Subversion的正确使用姿势,让版本控制更简单~
- 【吐血整理】SVN命令行,Subversion的正确使用姿势,让版本控制更简单~
- 【吐血整理】SVN命令行,Subversion的正确使用姿势,让版本控制更简单~
- Mac 上使用Cornerstone以及SVN进行本地版本控制
- 【吐血整理】SVN命令行,Subversion的正确使用姿势,让版本控制更简单~
- mac下Android studio如何使用SVN进行版本控制?
- 【吐血整理】SVN命令行,Subversion的正确使用姿势,让版本控制更简单~
- 【吐血整理】SVN命令行,Subversion的正确使用姿势,让版本控制更简单~
- 【吐血整理】SVN命令行,Subversion的正确使用姿势,让版本控制更简单~
- 【吐血整理】SVN命令行,Subversion的正确使用姿势,让版本控制更简单~
- 【吐血整理】SVN命令行,Subversion的正确使用姿势,让版本控制更简单~
- 【吐血整理】SVN命令行,Subversion的正确使用姿势,让版本控制更简单~
- Mac下SVN的使用---纯命令行控制
- MAC 使用自带命令行进行SVN操作