说来真是不好意思,做了这么长时间的开发一直没有使用svn。
周围的人都在使用,以前也学习过,但是在公司都是自已一个人开发,也没有用。
现在还是来记一下吧:
svn就是一个版本控制工具。
原理:
首先建立一个svn服务器,用于代码的统一管理。开发者连接svn服务器提交、更新代码。
从我学习过程开始填写吧。
同事提供给我一个svn地址和一个账号密码。
我们第一件事就是把svn地址里面的源码给下载下来。
我们打开命令行工具terminal.
我们首先cd到我们放文件的目录 这里我们放在桌面。
我们利用svn 将代码下载到该目录下
svn checkout +svnURL 这样默认下载到当前路径下
这就表示下载完成了。在桌面上就有了ios_dm文件。
现在文件下载下来了,但是里面是空的,没有工程。我的工程在本地一直没有用过svn。
我们想把自己的工程放到svn服务器上
首先将工程拖入到ios_dm/trunk目录下。
然后执行命令 svn add ios_dm/trunk/工程文件名
会看到很多类似的打印。这表示已经填加到本地仓库了。我们先在可以提交到svn服务器了。
svn commit -m “日志记录”
提交完成会输出版本信息
这表示已经提交成功。
在这我们的工程就算提交到服务器了。以后需要的话直接从服务器下载就行了。
我们在使用的时候也会遇到错误
我们来到公司的第一件事就是更新昨天提交的代码。因为不只自己在用,被人也在用。别人也提交了很多代码。
来到目录下
来更新代码
svn update
更新到最新的代码就开始写工程了。
开发完每天的任务就是提交代码了。当你svn commit 的时候胡出现
当我们看到out of date的时候,我们要知道这是本地版本与服务器版本不符,也就是说在你提交之前,别人已经提交过了。你需要先从服务器上更新最近的代码。
但是我们在update 的时候也会出现下面情况。
这就是我们说的冲突了。我们需要解决冲突。出现冲突的原因是因为多个人修改了相同文件的同一个地方。
从图中我们可以发现有多种方案让我们选择
选择: (p) 推迟,(df) 显示全部差异,(e) 编辑,
(mc) 我的版本, (tc) 他人的版本,
(s) 显示全部选项:
mc表示用我们本地的代码,覆盖服务器代码。
tc 表示用服务器代码,覆盖本地代码
p表示将服务器代码和本地代码全部放在一起手动解决。
df显示差异
我们来输入df看一下:
其中+<<<<<<< .mine到+=======中间的代码 是我们本地的代码
+=======到+>>>>>>> 是服务器代码 .r5表示服务器代码版本是5.
我们选p 再看本地文件会多出三个文件。
第一个文件是我们自己修改的文件副本,第二个是最初的文件副本,第三个是服务器最新版本的文件副本。
现在AdversModel.h文件我们打开会出现与上面打印差异相同的文字。
我们手动将代码修改一下。
修改完成
我们需要提交一下冲突解决。
svn resolved 解决冲突的文件
现在我们就可以重新提交了。
在提交过程中出现了个小插曲:电脑突然死机了,我重启了一下,出现了下面情况。
异常提交,存在冲突的残留。
现在我们需要先解决残留问题。
我们通过svn log 指令来获取版本信息
我们有时候或许需要转换到以前的版本。
使用svn update -r 4 4代表第4个版本
当我们不小心删除或者想把文件撤回到原来状态的时候使用
svn revert 文件名
svn status 来查看svn的状态
’ ’ 没有修改
‘A’ 被添加到本地代码仓库
‘C’ 冲突
‘D’ 被删除
‘I’ 被忽略
‘M’ 被修改
‘R’ 被替换
‘X’ 外部定义创建的版本目录
‘?’ 文件没有被添加到本地版本库内
‘!’ 文件丢失或者不完整(不是通过svn命令删除的文件)
‘~’ 受控文件被其他文件阻隔
我们在使用svn过程中一定要使用svn help
当我们的某个命令不会使用的时候我们使用svn help 指令