1,基础命令
svn co repository_url // check out respoitory
svn ci -m "your comments" // commit files
svn up repository_url // update files
2,branch & tag
所谓打tag,要从SVN官方推荐的目录结构说起了。SVN官方推荐在一个版本库的根目录下先建立trunk、branches、tags这三个文件夹,其中trunk是开发主干,存放日常开发的内容;branches存放各分支的内容,比如为不同客户定制的不同版本;tags存放某个版本状态的标签,比如验收测试版、1.0.3版等。branhces和tags本质没有区别,都是通过svn copy方式建立的,差异在于通常branches中的内容是需要继续修改或开发的,tags中的内容是存放不再修改的,这一般通过权限设置来解决,tags通常只给管理员开放写权限。
// 新建分支
svn copy master_repository_url branch_repository_url -m "your comments"
// 新建空白分支
svn mkdir branch_repository_url
// 删除分支
svn rm branch_repository_url -m "your comments"
// 新建tag
svn copy master_repository_url tag_repository_url -m "your comments"
// 删除tag
svn rm tag_repository_url -m "your comments"
// 查看branches
svn ls ^/branches --verbose
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:
svn merge -r HEAD:2500 something
为了保险起见,再次确认回滚的结果:
svn diff -r HEAD:2500 [something]
发现无误,提交即可。
3-3),分支与主干的合并:
# 分支合到主干 cd trunk
svn merge -r <revision where branch was cut>:<revision of trunk> svn://branch/path
# 分支当前版本为4847,想把4825到4847间的改动merge到主干
# cd trunk
svn merge -r 4825:4847 svn://branch/path
svn ci -m "merge branch changes r4835:4847 into trunk"
# 主干合到分支 cd branch
# 在r23创建了一个分支,trunk版本号更新到了25,想把23-25之间的改动merge到分支
svn merge -r 23:25 svn://trunk/path
svn ci -m "merge trunk changes r23:25 into my branch"
# cd trunk
# 查看当前Branch中已经有那些改动已经被合并到Trunk中
svn mergeinfo svn://branch/path
# cd trunk
# 查看Branch中那些改动还未合并
svn merginfo svn://branch/path --show-revs eligible
3-4),merge分支B到分支A
step1: Checkout URL A
# cd branch A
step2: merge URL B to your working copy of A
svn merge -r 10:HEAD http://branch-b .
step3: Commit A
4,冲突提示
(p) postpone 暂时推后处理,我可能要和那个和我冲突的家伙商量一番
(df) diff-full 把所有的修改列出来,比比看
(e) edit 直接编辑冲突的文件
(mc) mine-conflict 如果你很有自信可以只用你的修改,把别人的修改干掉
(tc) theirs-conflict 底气不足,还是用别人修改的吧
(s) show all options 显示其他可用的命令
5,svn符号
U:表示从服务器收到文件更新了
G:表示本地文件以及服务器文件都已更新,而且成功的合并了
其他的如下:
A:表示有文件或者目录添加到工作目录
R:表示文件或者目录被替换了.
C:表示文件的本地修改和服务器修改发生冲突
6,patch
有时同事A做的修改需要同事B去Review,同事C去提交。使用patch工具可以很好的决代码传递。
6-1).生成patch:
同事 A 运行如下命令生成 patch:
svn diff > aaa.patch
6-2).应用patch:
同事 B 运行如下命令应用 patch:
patch –p0 < aaa.patch
6-3).去除patch,恢复旧版本
当他 review 完代码,想删除该 patch 时, 可运行:
patch -RE -p0 < aaa.patch
-p0,是“当前路径”
-p1,是“上一级路径”
参考:http://stereointeractive.com/blog/2009/02/17/svn-merge-trunk-changes-to-your-branch/
网友评论