SVN : 集中式版本管理工具
checkout: 下载代码, 只需要做一次
update : 更新代码
commit :提交代码
三. SVN服务器搭建及配置(了解)
一. 端口号
http 80 一般是http, 因为SVN一般都是公司内部才能访问
https 443
二. 每次对服务器端做操作, 版本号都会提升
三. 安装
1. 参加一个仓库, 并配置用户
2. 应该(虚拟机注意是桥接模式, 网络是自动获取ip), 获取ip地址 (运行 --> cmd --> ipconfig --> 获取192.168.xx的地址)
3. 在Ma从浏览器中更换svn的地址, 进行访问
四. 常见UNIX命令行的使用(掌握)
pwd : 查看当前目录
cat : 在命令行中查看文件
五. SVN基本操作(掌握)
一. 模拟多人开发
一> .唐僧创建项目
1. cd 到指定文件夹下
2. 下载代码(指定一个目录跟服务器保持连接) : svn checkout http://192.168.23.112/svn/QQ --username=tangseng --password=tangseng
3. 再次cd 到SVN管理目录下, 千万不要忘记
4. 创建项目 : touch Car.h (拿一个文件模拟一个项目)
5. 查看状态: svn status status是将本地的代码和服务器做对比, 不一样的才会显示出来
6. 添加文件的管理权: svn add Car.h
7. 提交本地文件给服务器: svn commit -m "初始化了项目, 添加了Car.h文件" -m 一定要写, 以后查看版本时, 是通过注释来区分的. / ""可以不写, 是为了英文好区分注释
8. 更新代码 : svn update
---------------------------------
9. 删除文件: 不能直接删除, 否则up就回来 : svn delete 如来.h , 还需要提交
10. 恢复文件为最初的状态: (本地被修改, 但是没有提交服务器 / 文件被本地版本库删除了, 但是没有提交到服务器) : svn revert 如来.h
11. 查看帮助: svn help ,会调出所有的命令
12. 查看日志 : svn log , 查看之前的版本记录(备注一定要写, 而且要写的有意义)
13. 版本穿梭: svn update -r 10 回到第10个版本 , 可以查看之前的代码, 然后想回到最新的代码, 只要up一次, 即可
14. 告诉本地版本库解决了冲突 : svn resolved Car.h
二> 悟空加入开发(老手)
1. cd 到指定文件夹下
2. 下载代码(指定一个目录跟服务器保持连接) : svn checkout http://192.168.23.112/svn/QQ --username=tangseng --password=tangseng
3. 再次cd 到SVN管理目录下, 千万不要忘记
4. 正常开发, 该更新就更新, 该提交就提交
三> 八戒加入开发(新手)
1. cd 到指定文件夹下
2. 下载代码(指定一个目录跟服务器保持连接) : svn checkout http://192.168.23.112/svn/QQ --username=bajie --password=bajie
3. 再次cd 到SVN管理目录下, 千万不要忘记
4. 正常开发, 该更新就更新, 该提交就提交
团队开发, 就是, 写完提交, 别人更新
二. 常见命令的简写
checkout : svn co
status : svn st
commit : svn ci
update : svn up
三. 常见状态解释
? : 文件在SVN管理的目录下, 但是没有被SVN所管理. 看见? , 记得add
A : 文件在SVN管理的目录下, 并且, 已经被本地SVN版本库管理, 看见A, 记得commit
D : 文件在本地删除, 还需要提交
M : 文件在本地被修改过, 需要提交
G : 文件曾经发生过冲突, 然后被解决了
U : 文件被更新
C : 文件发生了冲突
四. 常见报错:
1. is not a working copy : 说明没有进入到SVN管理的目录. 就进行了SVN的命令. 应该进入到正确目录
2. xcrun: error: active developer path ("/Applications/Xcode 2.app/Contents/Developer") does not exist, use `xcode-select --switch path/to/Xcode.app` to specify the Xcode that you wish to use for command line developer tools (or see `man xcode-select`)
解决方案: 当多个Xcode版本同时存在, 可能工具就混乱了. 需要选择一下. 找Xcode --> 偏好设置 --> Locations --> command line 选择一下即可
3. is out of date : 文件过期 . 如果发生了冲突, 那么直接提交时, 会报此错误. 应该update.
五. 注意事项
1. 先更新, 再提交. (不会覆盖掉刚刚写的代码, 因为修改的文件版本高于服务器版本, 不会被覆盖.) 可以检测到冲突, 这只是一个操作规范.
2. 每一个文件都有单独的版本号, 24 - 25
3. 及时提交, 没做完一个小板块, 或者一个小功能就提交. 避免冲突
4. 如何避免冲突: 分模块, 沟通 .
六. 解决代码冲突
1. 代码冲突: 同一个文件, 同一行, 两个不同的人修改并提交. 就会发生冲突
2. 更新时, 如果发生冲突时会报以下错误
Conflict discovered in '/Users/apple/Desktop/SVN演练/八戒/Weixin/Car.h'.
//常用
(p) postpone : 延迟处理(svn工具不会帮你做解决冲突的事情, 自己手动解决) (版本会发生改变, 所以解决完冲突需要提交)
(mc) mine-conflict : 使用我的代码, 覆盖服务器的代码 . 还需要提交一次 (版本会发生改变, 所以需要提交)
(tc) theirs-conflict : 使用服务器的代码(他们的), 丢弃我的代码 (版本不会发生改变)
//不常用
(s) show all options : 展示所有的选项
(df) diff-full : 展示所有不同
(e) edit : 编辑, 在命令行中编辑
3. 发生冲突的文件会发生改变
<<<<<<< .mine ~ ======= 我的代码
======= ~ >>>>>>> .r24 服务器的代码
<<<<<<< .mine
@property (nonatomic, strong) NSString *banana3; // 悟空增加了香蕉3=======
@property (nonatomic, strong) NSString *xiaomi; // 八戒增加了小米>>>>>>> .r24
4. 解决冲突的方案:
1. (建议)选p, 延迟解决
2. 删除不认识的代码(<< == >> ), 然后自己合并代码
3. 告诉本地版本库, 自己已经解决了冲突: svn resolved Car.h
4. 需要提交代码 (其它人更新即可)
七. 使用第三方图形化工具
http://192.168.23.112/svn/Weibo/trunk
1. 小提示: 使用Cornerstone时, 拷贝svn网址, Cornerstone会自动将地址填入界面内.
2. 使用Cornerstone, 应该先连接远程仓库(左下角), 然后点击checkout下载代码.
注意: checkout选择目录时, 应将底部svn版本选择为1.7. 因为mac默认就是1.7版本. 如果版本过低, xcode会提示升级, 然后Cornerstone重启一次即可
3. 忽略文件:
1. .xcuserstate 不要提交给服务器. 此文件记录了用户当前展示的文件, 及目录展开结构
2. (非项目文件)data后缀的(还包括用户断点) 都可以忽略不提交
3. 通过工具, 先delete, 在commit, 再次编辑时就会出现, 最后选择ignore
八. 使用Xcode集成SVN
1. checkout : 三种方式
1. xcode欢迎界面, 选择第三个选项, 即可checkout
2. 选中xcode, 找偏好设置, 找账户, 左下角添加远程仓库
3. 选中xcode, 找顶部的source control菜单, 选择checkout (最简单)
2. 常用快捷键
1. update : com + opt + x
2. commit : com + opt + c
3. xcode解决代码冲突
只要更新, 一旦冲突, 就会有个界面提示选择. 应该选择下方的四个小按钮, update, 最后commmit就可以了. (没有提示resolved)
4. 如果将来写代码, 发现文件改的不像样子, 可以直接丢弃修改
5. SB / Xib 发生冲突的解决方案: 需要右键查看源码, 然后自己比对丢失的代码. 团队开发中, 尽量避免界面发生冲突 (如果不小心移动了界面, 那么可以丢弃修改)
九. SVN目录结构
trunk : 开发主目录
branch : 分支, 一般用于修复bug或者开发新功能.
tags : 备份重大版本(一般可以备份上架AppStore的版本)