1,基础命令
1 | svn co repository_url // check out respoitory |
2,branch & tag
所谓打tag,要从SVN官方推荐的目录结构说起了。SVN官方推荐在一个版本库的根目录下先建立trunk、branches、tags这三个文件夹,其中trunk是开发主干,存放日常开发的内容;branches存放各分支的内容,比如为不同客户定制的不同版本;tags存放某个版本状态的标签,比如验收测试版、1.0.3版等。branhces和tags本质没有区别,都是通过svn copy方式建立的,差异在于通常branches中的内容是需要继续修改或开发的,tags中的内容是存放不再修改的,这一般通过权限设置来解决,tags通常只给管理员开放写权限。
1 | // 新建分支 |
3,回滚
3-1),改动没有被提交
这种情况下,使用svn revert就能取消之前的修改。svn revert用法如下:当something为单个文件时,直接svn revert something就行了;当something为目录时,需要加上参数-R(Recursive,递归),否则只会将something这个目录的改动。
3-2),改动已经被提交
这种情况下,用svn merge命令来进行回滚。先运行svn up保证拿到最新的版本,然后svn log查看并找到要回滚的版本号,如果想要更详细的了解情况,可以使用svn diff -r HEAD:2500 [something],此处的something可以是文件、目录或整个项目。
如果需要回滚到版本号2500:
1 | svn merge -r HEAD:2500 something |
为了保险起见,再次确认回滚的结果:
1 | svn diff -r HEAD:2500 [something] |
发现无误,提交即可。
3-3),分支与主干的合并:
1 | # 分支合到主干 cd trunk |
3-4),merge分支B到分支A
1 | step1: Checkout URL A |
4,冲突提示
1 | (p) postpone 暂时推后处理,我可能要和那个和我冲突的家伙商量一番 |
5,svn符号
1 | U:表示从服务器收到文件更新了 |
6,patch
有时同事A做的修改需要同事B去Review,同事C去提交。使用patch工具可以很好的决代码传递。
6-1).生成patch:
同事 A 运行如下命令生成 patch:
1 | svn diff > aaa.patch |
6-2).应用patch:
同事 B 运行如下命令应用 patch:
1 | patch –p0 < aaa.patch |
6-3).去除patch,恢复旧版本
当他 review 完代码,想删除该 patch 时, 可运行:
1 | patch -RE -p0 < aaa.patch |
-p0,是“当前路径”
-p1,是“上一级路径”
参考:http://stereointeractive.com/blog/2009/02/17/svn-merge-trunk-changes-to-your-branch/