一. SVN原理图
- 需要SVN账号和密码.
- Checkout将整个项目下载到本地.
- 每天下班前,将可运行的代码提交,即commit”可运行版本”.
- 每天上班前,update前一天所有代码.
二. 运用过程
- 先从服务器上下载代码(本地仓库)Check.
- 当有人代码写完后(必须是可运行的代码),commit(提交)到服务 器,这时服务器上代码会更新为此人提交的代码.
- 当再有人commit(提交)代码时,会报错(out of data).
- 这时需要做更新(Updata)操作.
- 使用策略: 拷贝-修改-合并 方案
三.SVN 命令行
/**1.SVN基本命令*/
命令行格式:
svn <subcommand> [options] [args]
说明
svn 子命令 [选项] [参数]
提示:
# [中括号]中包含的内容是可选的
# (子命令缩写)
/**2.查看帮助信息*/
$ svn help
查看svn所有命令的帮助
$ svn help 子命令
1. 将服务器文件下载到本地(Checkout)
将项目检出(下载) 至本地,URL是服务器地址,[PATH]是要下载的路径
svn checkout URL [PATH]
svn co URL [PATH]
注意:这里的中括号[ ]代表可选(可以省略)
示例
svn checkout https://192.168.1.106/svn/Weibo/ /Users/lnj/Documents/workspace
# checkout服务器上的代码仓库
$ svn co http://10.0.1.15/svn/weibo --username manager --password jingli
提示:checkout(co)之后,本地代码库中会记录用户名和密码,后续操作不用再另行指定.
http:开头代表的是:代码仓库的远程地址.
jingli代表的是:将代码下载到本地的哪个路径.
如果省略jingli的路径,就下载到命令行当前所在的路径.
2. 提交到服务器(Commit)
2.1. 首先要添加到本地仓库.
向本地的版本控制库中添加一个新文件
svn add PATH
示例
svn add /Users/lnj/Desktop/workspace/Weibo/branches/User.m
代表的是:添加哪个文件到版本控制库中
/**main.c 是要添加本地仓库的文件*/
$ svn add main.c PATH
2.2. 提交到服务器(commit 缩写ci)
$ svn ci -m "添加了main.c文件" 或下面代码
$ svn ci -m "备注信息"
注意:一定要养成写注释的良好习惯
3. 更新代码仓库
svn update [PATH]
示例
svn update /Users/lnj/Desktop/workspace/Weibo/branches/User.m
/Users代表的是:更新哪个文件的内容
如果省略橙色的路径,就更新命令行所在路径的所有内容
/**3.2将文件恢复至某个版本*/
svn update -r 版本号 [PATH]
4. 删除某个文件(注意:千万不要手动移到废纸篓)
删除服务器上的某个文件,需要做2个步骤
将文件从本地的版本控制库中移除:svn delete 、svn remove
提交刚才的删除操作到服务器:svn commit
将文件从本地的版本控制库中移除
svn delete PATH
示例
svn delete /Users/lnj/Desktop/workspace/Weibo/branches/User.m
橙色代表的是:将哪个文件从版本控制库中移除
5. 查看文件状态
svn st 显示的文件状态
第1列状态说明:描述文件被添加、删除或其他修改
--------------------------------------------------------------------------------
' ' 没有修改
'A' 被添加到本地代码仓库
'C' 冲突
'D' 被删除
'I' 被忽略
'M' 被修改
'R' 被替换
'X' 外部定义创建的版本目录
'?' 文件没有被添加到本地版本库内
'!' 文件丢失或者不完整(不是通过svn命令删除的文件)
'~' 受控文件被其他文件阻隔
6.如何解决冲突的问题
1. 超时
当本地低于服务器版本时,这时提交不成功,这时需要先更新,后提交
错误代码如下,出现out of date就是超时了,这时需要svn update:
冲突
1.当多个人修改了同一个文件同一行的代码,conflict discovered in 是冲突报错.
2.解决方法 : 3种方法 :- mine-conflict 代表用我们的代码替换服务器代码 mc
- thrirs- conflict 代表用服务器的代码替换服务器代码 tc
- postpone 代表手动 p
3.手动解决冲突
如果点击p ,自己解决的话,会创建三个备份文件, 一个本地版本备份,一个是服务器版本备份,一个是修改后版本备份,main.c代表自己demo文件.
main.c.mine 备份自己最新代码
main.c.17 备份修改前的代码.
main.c.18 备份服务器的代码
<<<<<<<<<到======中间存放的是我们自己修改的代码,=====到>>>>>>>中间存放的是服务器最新代码,要修改把它们如<<<<<< ==== >>>> 删除
注意:手动解决完冲突之后,需要告诉SVN服务器我们已经解决了,resolved代表告诉服务器我已经解决了, svn resolved 路径 ,如下
svn resolved caipiao/Lottery/Classes/Mine/Controller/Html/HelpViewController.m
**7. SVC客户端命令**
svn checkout :下载服务器的代码到本地 (简写svn co)
svn commit :将改动的文件提交到服务器(简写svn ci)
svn update :更新服务器的代码到本地 (简写svn up)
svn add :向本地的版本控制库中添加新文件
svn delete、svn remove :从本地的版本控制库中删除文件(简写svn del、svn rm)
svn move :移动文件或者目录或文件更名
svn mkdir :创建纳入版本控制下的新目录
svn revert :撤销之前的一切修改
svn merge :将两个版本之间的差异合并到当前文件
svn info :查看文件的详细信息
svn diff :查看不同版本的区别
svn log :查看日志信息
svn list :列出版本库下的文件和目录列表
svn status :查看文件状态(简写svn st)
svn help :获取帮助信息(比如svn help ci)
svn lock :加锁
svn unlock :解锁
常见问题
- 不小心写错了很多东西,想撤销所写的东西(还未把修改提交到服务器)
svn revert
- 不小心删错了文件,想把文件恢复回来(还未把删除提交到服务器)
svn revert
- 不小心写错了很多东西,想撤销所写的东西(已经把修改提交到服务器)
svn update -r 版本号
- 不小心删错了文件,想把文件恢复回来(已经把删除提交到服务器)
svn update -r 版本号
- 注意
.svn这个隐藏目录记录着非常关键的信息
千万不要手工修改或删除这个 .svn隐藏目录和里面的文件! 否则将会导致本地的工作副本被破坏,无法再进行操作