Paulpang

专注 | 分享 | 快乐

Keep It Simple Do It Well~


SVN 命令行

一. 将服务器文件下载到本地

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会自动保存第一步,故第一步可以省略)

  1. 将新建的文件添加到本地代码库
    $ svn add main.c
    
  2. 将刚刚添加的文件提交到服务器
    $ 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或者有新的需求的时候,创建一个分支,在分支上开发,开发完成后,在合并到主干