1. 基础知识
1) 版本库布局
版本库一般的布局结构为trunk(主干)、branches(分支)、tags(标签)。
i. trunk主干
trunk就是开发的主线,一般项目都是导入到主线来开发的。
ii. branches分支
branches一般是trunk某个版本的拷贝,如果你想在某一段时间单独对某个功能进行开发,而不像和其它功能混在一起,这时候branches是一个很好用的方式。你不会想在trunk里一直开发这个功能,不提交,直到开发完成吧。一般也会合并的trunk中的。
iii. tags标签
tags是啥?标签,顾名思义,就是某个版本的记录啦,就好像看一本厚厚的,看到哪一页了,做个记号,方便以后查阅。
迭代开发时,在某个版本发布应用,为了做个记录,这时候打个tag很实用。发布后,线上出现了一个bug,可以根据这个tag进行修复再发版本。
2. 使用
理解了主干、分支、标签的作用,下面说下svn的使用。我在项目中常用的功能一般是checkout、commit、update、分支管理、标签管理、版本回退。
checkout
代码检出比较简单,执行以下命令,$project_name表示项目名称:
svn co svn://.../path $project_name
有时想检出某个历史版本,$version标识版本号:
svn co svn://.../path@$version $project_name
commit
提交代码都会用,不多说:
svn ci -m "更新说明"
有时只想提交某个文件:
svn ci path_to_file -m "更新说明"
update
工作中尽量多的update,执行命令
svn update
分支
- 增加分支
增加一个分支,实际上就是把trunk复制到branches目录下,起一个特定的名字,表示该分支的作用;
svn copy svn://../trunk/project svn://../branches/project_buy -m "添加购买功能分支"
之后就可以在该分支上单独开发购买功能了,不会影响trunk的正常开发喽。 - 合并分支
购买分支上的功能开发完毕了,要合并到trunk中;
- 合并到trunk需要在trunk的分支下操作;
svn merge -r r1:r2 svn://../branches/project_buy ./
r1:r2表示从版本记录r1和r2之间的变化合并到当前工作目录中。 - 然后提交
svn ci -m "合并购买功能到主干"
- 删除分支
有时不需要某些分支了,删掉
svn delete svn://../branches/project_buy -m "删除购买功能到主干"
- 合并到trunk需要在trunk的分支下操作;
标签
- 标签创建
svn copy svn://../trunk/project svn://../tags/project_tag1 -m "创建标签1"
- 标签删除
svn rm svn://../tags/project_tag1 -m "删除标签1"
版本回退
版本回退这个功能很实用,开发过程中难免思路问题,回退代码。
- 没有提交的代码回退
svn revert svn://../path_to_file
- 已提交代码回退
svn merge -r r2:r1 svn://../path_to_file merge_file
好面熟啊,这个怎么跟分支合并差不多尼。本质上是一样的啦。r2:r1从高版本到低版本可不就是回退了嘛。从低版本到高版本增加记录,就是添加喽。
其它一些基础命令
- 记录查看log
查看版本历史记录
svn log | more
按n进行下翻,按q退出
查看版本历史记录,并看修改了哪些文件
svn log -v | more
- 查看文件变化diff
本地文件和版本库的变化
svn diff path_to_file | more
版本库版本的变化
svn diff -c r svn://../path_to_file | more
3. 结束语
掌握常用的这几个svn命令足以对付大部分日常工作了,理解之后,日常svn的操作并不需要工具的。