SVN subversion 集中式控制
常规使用
svn cheakout : 将服务器下载到本地
svn commit: 将本地修改内容提交到服务器
svn update : 将最新的代码更新到本地
svn revert person.h : 将person.h 没有提交到服务器的所有代码删除
SVN目录结构简介
trunk:主干开发主目录,cheakout这个目录
branches:分支目录。添加非主线功能时使用,测试后,可合并到主干
tag:标记目录。版本更新迭代时的备份
环境的搭建
服务端:visual svn Server
客户端:控制台,conerstone,Xcode,Versions
资源 链接:https://pan.baidu.com/s/1i5L9gED 密码:1ycq
下载安装服务端的时候exe,直接一直下一步,安装标准版就 ,就可以了。标准版免费 , 然后选择Locations:文件存放地址,仓库地址 ,选择http协议就可以了。
sever port端口: 默认80 就可以了。一直下一步安装成功。
然后服务端创建仓库名称。创建用户账户和密码等。
- 在这里设置用户角色,组,和仓库,权限等。设置权限有 NO accss 任何人都不可访问 , read Only 只读 read/write 可读可写 。权限等 ,创建仓库,创建空的项目,设置项目为任何人不可访问,创建仓库好了之后,在分配权限
如何链接SVN,我用的conerstone,服务端创建角色。提供url链接,我们这边链接服务端。查看服务端url地址。可以直接在服务端copyurl 。也可以在控制台输入 ipconfig 查看。下面是我链接服务端的图片
然后连接svn成功。cheakout 项目到本地,这里我记录一下我犯的一个错误。我cheakout 项目到本地的时候,会让你选择一个 ‘format’一定要选择你当前的最高版本。我不小心选择了一个第一点的版本,导致本地xcode 修改了文件后。本地xcode 旁边没有显示 M 的标识。最后发现原来是这里引起的原因
如何控制台初始化项目
首先我们先了解svn的常见几种状态//到指定的目录
zwcmacbook-pro:~ chenguimin$ cd /Users/chenguimin/Desktop/SVN\ Demo/cgm
//checkout 项目到目录下自己的username 账号 password 密码
zwcmacbook-pro:cgm chenguimin$ svn checkout http://5HWJMQD3UEOM463/svn/QQ/branches/QQ --username=cgm --password=123456
//checkout 好文件下来之后,我们。可以在控制台,创建一个test.m 文件,
然后查看svn的管理状态,我们可以看到当前的样子。
? 不在svn的管理之下。所以我们需要 add test.m
zwcmacbook-pro:QQ chenguimin$ touch test.m
zwcmacbook-pro:QQ chenguimin$ svn status
? test.m
//添加到svn 管理
zwcmacbook-pro:QQ chenguimin$ svn add test.m
A test.m
zwcmacbook-pro:QQ chenguimin$ svn commit -m 'test.m 初始化项目,将test.m 上传到服务器'
Adding test.m
Transmitting file data .done
Committing transaction...
//版本号+1
Committed revision 25.
zwcmacbook-pro:QQ chenguimin$
//查看版本号
zwcmacbook-pro:QQ chenguimin$ svn log
//如何回退
zwcmacbook-pro:QQ chenguimin$ svn update -r20 //回到版本20,查看是否是自己需要的版,因为回滚版本了。不是最新的版本号。所以我们需要
zwcmacbook-pro:QQ chenguimin$ svn update
//然后合并代码。最新的是25 合并 20 版本号的某个文件 合并25person.m
zwcmacbook-pro:QQ chenguimin$ svn merge -r25:24 Person.m
--- Recording mergeinfo for reverse merge of r25 into 'Person.m':
U Person.m
--- Eliding mergeinfo from 'Person.m':
U Person.m
zwcmacbook-pro:QQ chenguimin$
重点来了。这些一般都是xcode集成好了。或者使用conerstone 。但是我们的.a 静态库,提交不了。就需要用上面的命令行。进行单独的上传, 进入指定目录,添加add 静态库。commit 提交。
经典提交错误 out of date 过期了。当前的版本不是最新的版本。需要先updata一下。
简单的演示一下冲突。
现象。现在我们做了2个角色甲乙。都同时修改了person 类。甲增加了name属性。提交了、乙后面增加 height属性。现在乙提交会出现常见错误out of date 过期版本,所有我们需要更新 updata 一下。就会出现冲突文件了。如果用的conerstong 会提示 C 如果用的控制台会出现这样的情况
zwcmacbook-pro:TESTQQ chenguimin$ svn updata
Unknown subcommand: 'updata'
Type 'svn help' for usage.
zwcmacbook-pro:TESTQQ chenguimin$ svn update
Updating '.':
C Person.h
Updated to revision 28.
Summary of conflicts:
Text conflicts: 1
Conflict discovered in file 'Person.h'.
Select: (p) postpone, (df) show diff, (e) edit file, (m) merge,
(mc) my side of conflict, (tc) their side of conflict,
(s) show all options:
上面就是简单的代码冲突产生的过程与现象。现在我们看出现的提示的意思
Resolved:解决冲突
Conflict:冲突
out of data :本地版本号低于服务器版本
df:在控制台中展示冲突的所有的不同
e: 在命令行中编辑冲突
mc:用我的代码覆盖服务器的代码
tc:用服务器的代码覆盖我的代码
p:延迟冲突。展示所有的冲突文件,手动修改
推荐使用 (p) postpone 手动解决。他会把所有的冲突在编译器里面展示出来。会把冲入不同的代码都展示在编译器。在编译里面选择删掉不需要的代码。 解决完成后。在控制台 输入解决冲突下面就是选择了p。自己手动解决冲突文件的样子
#import <Foundation/Foundation.h>
@interface Person : NSObject
<<<<<<< .mine
/** ***/
@property (nonatomic,copy)NSString *name;
/** ***/
@property (nonatomic,copy)NSString *height;
@property (nonatomic,copy)NSString *height1;
@property (nonatomic,copy)NSString *height2;
||||||| .r27
=======
/** ***/
@property (nonatomic,copy)NSString *name;
@property (nonatomic,copy)NSString *name1;
@property (nonatomic,copy)NSString *nam2;
@property (nonatomic,copy)NSString *nam3;
@property (nonatomic,copy)NSString *name4;
@property (nonatomic,copy)NSString *name5;
>>>>>>> .r29
@end
//person.h 就是解决冲突的文件。解决完成输入此命令svn resolved person.h
zwcmacbook-pro:TESTQQ chenguimin$ svn resolved person.h
svn: warning: W155010: The node '/Users/chenguimin/Desktop/TESTQQ/person.h' was not found.
zwcmacbook-pro:TESTQQ chenguimin$ svn resolved Person.h
Resolved conflicted state of 'Person.h'
zwcmacbook-pro:TESTQQ chenguimin$ svn commit -m '提交test Person.h 的最新代码'
Sending Person.h
Transmitting file data .done
Committing transaction...
Committed revision 30.
zwcmacbook-pro:TESTQQ chenguimin$
如果是 cornerstone 解决完冲突,选择冲突文件,用上面注意是命令行。cornerstone 的简单使用。界面都很简单,主要是如何忽略等操作
需要忽略的文件
比如以上。xcuserdata 个人信息相关,比如最近打开的目录结构。断点点等。
- xcode 会默认记录之前停留的文件。下次打开依然在这个文件。这个不需要进行共享
- 断点信息不需要共享
- xcode 会默认记录之前目录的打开情况。不需要共享
上面三点都是存放在xcuserdata 里面的。下面介绍忽略操作的几个步骤。拿xcuserdata举例 ,这里因为我以前做过一次,没有重新测试。不知道,直接忽略 1 ,2 ,3 ,4直接第五步不会不成功
1: 删除需要的忽略的文件,比如xcuserdata。svn 会有D 标识
2: 提交有D标识,需要被忽略的文件
3: commit 提交需要忽略的文件,
4: 再在本地再把xcuserdata 生成出,打断点。打开目录结构都可以重新生成xcuserdata 文件
5: 在svn 选择xcuserdata文件夹。鼠标右键或者svn界面 ignore选择需要忽略的xcuserdata ,标记一下、。ignore之后一定要 update 。因为我们进行了忽略操作。原来的project.xcworkspace 改变了。所有我们需要update一下,然后进行commit 。这样我们忽略操作就完成了。
当然我们也可以在设置里面进行忽略