1.版本管理工具包括
CVS(已过时)
SVN(常用)
GIT(高大上) (GitHub, OSChina)
2.实际使用步骤:
1. 安装SVN服务器
2. 创建仓库
3. 创建用户
4. 为仓库添加用户
5. 经理初始化项目并进行忽略xcuserdata操作
6. 其他同事Checkout检出进行开发
7. 李四新人加入,新人需要 源代码,需求文档,接口文档,效果图, 源代码一般先分配只读权限,熟悉代码之后再分配Write权限
3.SVN服务器安装:
Windows:安装Visual SVN Server(项目经理或系统维护人员操作)
1. 安装SVN 服务器



2.创建仓库


3. 创建用户

4. 初始化项目
客户端:
Mac : Cornerstone(常用)、Versions、Xcode、Command Line
Command Line(命令行):
svn checkout 服务器地址 --username=xxx --password=xxx
svn add 文件名
svn commit -m "注释"
svn update
svn resolve 文件名
svn update -r版本号 // 还原到指定版本内容
svn merge -r最新版本:回退版本 文件名
svn revert 文件名
svn remove 文件名
svn log // 查看版本信息
svn status
Cornerstone
一般情况下用Cornerstone进行项目初始化、忽略操作、打版本、分支、合并到主干操作,平常经常使用的更新、提交、冲突 使用Xcode中的Source Control 即可!
Cornerstone可以忽略xcuserdata文件,而Xcode不能忽略该文件
使用该工具应特别注意:一定要使用
Command + R 经常
刷新,因为Cornerstone不会主动刷新,会造成本地和Cornerstone上的文件内容不一致,不是最新的,在做版本备份和打分支的时候版本号也不是最新的,如果版本号不是最新的,会出现麻烦,因为版本都打错了
操作步骤:
1. 连接远程仓库
2. 检出trunk
3. 初始化项目并删除xcuserdata
4. 重新生成xcuserdata并进行忽略操作并提交
5. 其他同事开始开发
Working copies:工作区
Repositories:仓库
1. 连接服务器仓库
2. 将远程仓库中的trunk代码检出到本地
3. 在检出的目录下面创建工程,并提交
4. 删除两个xcuserdata文件夹
删除之后,要再update一下,然后再提交。
5.生成xcuserdata,并进行忽略操作
删除ViewController中内存警告方法,将目录结构折叠起来,并在viewDidLoad方法中加一个断点,这样查看Cornerstone poeject.xcworkspace目录下还会生成两个xcuserdata,并对其忽略操作! 然后先Update 再 Commit提交,然后修改一下ViewController中的viewDidLoad方法,使用Source Control -->Commit 当再一次修改源代码提交的时候就不会再有User Data 之类的文件了
6. 再次提交时,发现已没有User Data文件夹了,可直接提交
xcuserdata包含的内容
记录用户上次打开的文件,用于xcode下次打开时,直接打开该文件
记录目录打开的情况,以便xcode下次打开的时候还原上次的状态
记录用户打的断点信息
Project Settings: 该配置文件需要共享,
该文件包含文件目录位置
至此,初始化已完成,其他同事即可检出进行开发了,在之后的更新、提交、冲突等操作可以直接使用Xcode中的Source Control进行管理即可
在Xcode中使用SVN注意点:
1. Xcode中的SVN不识别 【静态库】 .a 文件(静态库包含实现代码,但不能被看到,保护核心源代码)必须使用命令行方式进行添加
svn add Xxx.a 然后Source Control ----> Commit 提交
2. Storyboard会被翻译成XML,一但Storyboard冲突,要想解决只能去修改晦涩的XML了,不忍直视!所以千万别让storyboard冲突,尽量只有一个人在操作Storyboard,但一般情况下app项目是按模块开发的,所以一般一个模块只有一个人在维护,这也减少了冲突的机会
SVN状态:
A:被添加到本地代码仓库
M:被修改
C:冲突
D :被删除
I: 被忽略
trunk: 主线开发
branches:为了修复tags中的bug,一般以fixbug作为后缀
tags:版本备份
1. 项目经过3个月的努力通过测试,完成了1.0版本,并已经上到App Store了;
2. 将trunk下的这份代码打成1.0版本放到tags下进行版本备份Xxx1.0
3. 开发人员接着开发第二个版本2.0
4. 在开发第二个版本的时候,用户反馈第一个版本有一个重大bug需要紧急修复,开发人员需要将1.0版本的代码做成一个分支并起名Xxx-fixbug
5. 接着开发人员checkout这个分支,并修复bug,并上传到app store, 并将该份代码进行1.1的版本备份 ,Xxx1.1
6. 接着需要将分支合并到主干中并提交,并删除分支中的项目
7. 开发人员接着开发2.0版本
多更新,多提交,不要每天只提交一次,做好一个小模块或小功能就可以考虑提交,尽可能的避免冲突