一. 将服务器文件下载到本地
1> 切换工作目录
$ cd 工作目录的文件夹位置
2> checkout服务器上的代码仓库
$ svn checkout 服务器地址 -- username=用户名 --password=密码 // 只需要做一次
例如: svn checkout http://192.168.1.103/svn/weibo --username=manager --password=manager
提示:checkout(co)之后,命令行会记录用户名和密码,后续操作不用再另行指定
二. 在项目路径下添加文件夹
$ svn add 文件夹名称 // 添加文件夹
三. 初始化项目的时候忽略一些文件
xcshareddata : 记录了远程仓库的地址 / 这个文件要删除
xcuserdata : 包含了文件夹的打开结构/当前用户停留在哪个文件中/用户的断点 ---> 这个文件直接删除掉
删除完成后,该点代码提交后,在看xcuserdata 变为 ? 状态 ,这时候需要将这个文件 ignore ,在提交就ok了
四. 更新本地代码
$ svn update
五. 查看本地代码库状态
$ svn status
注意: 文件状态说明
- ’ ‘ 没有修改
- ‘A’ 被添加到本地代码仓库
- ‘C’ 冲突
- ‘D’ 代表该文件已经在本地进行了删除,还没有将删除的操作共享给服务器
- ‘I’ 被忽略
- ‘M’ 被修改
- ‘R’ 被替换
- ‘X’ 外部定义创建的版本目录
- ’?’ 文件没有被添加到本地版本库内/ 不识别的文件,或者文件被删除过,或者该文件是新添加的文件,还没有被本地代码仓库进行管理
- ’!’ 文件丢失或者不完整(不是通过svn命令删除的文件)
- ’~’ 受控文件被其他文件阻隔
提示: 错误提示:”is not a working copy”,必须在svn的工作目录下才能正确使用svn的命令
六. 将文件提交到服务器的版本库中
$ svn commit -m "注释"
注意: 添加文件的两个步骤(Xcode会自动保存第一步,故第一步可以省略)
- 将新建的文件添加到本地代码库
$ svn add main.c
- 将刚刚添加的文件提交到服务器
$ svn ci -m "备注信息"
七. 查看SVN日志
# 查看svn日志
$ svn log
# 查看某一个文件的日志
$ svn log filename
# 查看某一个文件某个版本的日志
$ svn log filename@1
八. 删除文件
# 删除文件
$ svn remove/delete
'D' 代表该文件已经在本地进行了删除,还没有将删除的操作共享给服务器
# 提交删除
$ svn commit -m "注释"
注意:不要使用文件管理器直接删除文件
九. 查看SVN日志
# 查看svn日志
$ svn log
# 查看某一个文件的日志
$ svn log filename
# 查看某一个文件某个版本的日志
$ svn log filename@1
十. 版本回退
1. 查看更新的版本日志
$ svn log
2. 回退版本(本地回到之前版本,服务器版本还没回退)
$ svn update -r 版本号 svn update -r 9
3. 回到当前版本 例如当前为11版本
$ svn update
4. 将当前的11版本合并到6版本上
$ svn merge -r 11:6 合并的文件
5. 将本地合并过的代码提交到服务器
$ svn commit -m "回退到第6版本"
十一. 冲突解决
场景: 当提交代码的时候,提示 out of date时,这是需要先用svn update更新代码,这时候会出现代码冲突, 会提示一下解决办法让选择,常用的有一下三个:
(p) postpone : 选择这个时: 文件会多出来三个文件 persion.h.mine / persion.h.h_r10 /
persion.h.h_r11
(mc) mine-conflict : 当发生冲突的时候,使用我的代码,覆盖服务器的代码
(tc) theirs-conflict : 当发生冲突的时候,使用服务器的代码,覆盖本地代码
注意: 在开发中,常用的是选择 (p) postpone
- 选择这个时: 文件会多出来三个文件: persion.h.mine, persion.h.h_r10 , persion.h.h_r11
* xxx.mine代表是我的文件
* xxx.h_r10 代表服务器上上一个版本的文件
* xxx.h_r11 代表服务器上一个版本的文件
1. 在persion.h文件中会出现 下面文字
<<<<<< .mine
表示该位置是我的代码
===========
表示该位置是服务器的代码
>>>>>>> .r11
2. 冲突解决后, 需要解决冲突 :
$ svn resolved 解决冲突的文件名 例如: svn resolved persion.h
3. 解决之后,需要将解决后的代码提交到服务器:
$ svn commit -m "注释"
十二. SVN目录结构
- Trunk 主干,一般项目开发都在主干进行开发
- Tags 存放已经上线的重大版本号
- Branches 当发生重大Bug或者有新的需求的时候,创建一个分支,在分支上开发,开发完成后,在合并到主干