Svn常用命令总结[转载]

Svn篇

首先你可以通过svn help/h来查看帮助信息。

开始工作

检出(checkout)服务器数据到本地

你刚入职一家公司,或新加入某个团队,立马参与到一个项目中,那么就得获取项目代码,开始你的项目生涯。这个时候一般你需要检出项目代码:

     
     
svn checkout/co [directory] project(本地目录名,可选)
// 检出版本3
svn checkout/co –revision/r 3 [directory] project(本地目录名,可选)

接着你就可以通过svn info来查看版本信息了。

导入(import)项目

有时候项目尚未创建,你需要将本地的目录放到SVN版本仓库中:

     
     
svn import project(本地目录名) [directory]

然后可以通过svn list/ls确认已经在版本仓库中了。

更新

每次你开始编码前,你都最好先更新下本地的工作目录:

     
     
cd project
svn update/up
// 更新到版本3
svn update/up –revision/r 3

这样你就可以在新的项目代码基础上工作了。

修改

可能你写了一个新的模块,增加了一些新的文件,需要纳入项目的版本控制:

     
     
svn add index.html list.html ...

可能你发现某个模块已经陈旧了,不再使用了:

     
     
svn delete/del/remove/rm hello.html

可能你发现一个模块的命名不太合理,需要改名:

     
     
svn move/mv main.css common.css

可能你要创建一个新的较大的模块,需要新增目录:

     
     
svn mkdir list

可能你发现要写的模块代码似于旧的模块,直接复制整个代码:

     
     
svn copy/cp users/list.js list/list.js

检查

忙碌的一天过去了,或者一个任务完成了,这个时候一般会将你的工作成果,也就是代码更新到版本仓库。

习惯上会先检查下修改状态:

     
     
svn status/ stat/st

看到一些SVN状态位信息,确认是修改了哪些文件,之后一般会自己code review一下代码的改动,可能有的人会习惯直接用SVN方式来查看:

     
     
svn diff/di folder(本地目录名,可选,默认当前目录)
// 查看index.html当前版本和版本3的差别
svn diff/di –revision/r 3 index.html
// 查看index.html版本3和版本4的差别
svn diff/di –revision/r 3:4 index.html

一般来说这个时候,没有什么特殊情况,就直接进入“提交”阶段了,然后结束一个工作日或工作周期,但难免会有些特殊情况出现。

取消修改

当你code review完后,发现有些改动不满意,你可能又会取消这些修改:

     
     
svn revert index.html
// 回滚整个目录
svn revert . -R/--recursive

分支操作

创建分支

创建一个分支

     
     
svn copy/cp svn://xxx.com/repo/trunk svn://xxx.com/repo/branches/ test -m 'make branch test'

把工作目录转到分支

     
     
svn switch/sw svn://xxx.com/repo/branches/ test

当然,也可以再转到主干svn switch/sw svn://xxx.com/repo/trunk

给分支打标签

复制最新的发布分支为标签:

     
     
svn copy/cp svn://xxx.com/repo/branches/ test svn://xxx.com/repo/tags/test_tag
合并一个分支到主干

查找到分支版本

     
     
cd branches/ test(分支目录)
svn log –stop-on-copy

最后一个r11340就是创建分支时的reversion,也可:

     
     
cd trunk(主干目录)
svn -q –stop-on-copy svn://xxx.com/repo/branches/ test(分支url)

这条命令会查询出自创建分支以后分支上的所有修改,最下面的那个版本号就是我们要找的版本号。

合并到主干

     
     
cd trunk(主干目录)
svn merge -r 11340(分支版本):HEAD svn://xxx.com/repo/branches/ test(分支url)
两个分支合并

假设99是从旧主干引出,100打完tag,表示是新主干。

合并最新代码的意思是:将新主干与旧主干比对,并添加到99中。这样99既有自己的新增的代码,也同时有最新线上的代码。

     
     
cd 99_Branch
svn merge svn://xxx.com/repo/tags/project_Old_BL svn://xxx.com/repo/tags/project_New_BL
svn ci -m 'merge 100 trunk'

但是后来,其他人又向100提了代码,所以还需要将100分支(即打了tag后的100,打了tag前的100已是主干)合并至99中。

合并办法:找出100分支,比对与新主干之间的差别,并添加到99中。这样99就有最新的全部代码了。

     
     
cd 99_Branch
svn merge svn://xxx.com/repo/tags/project_New_BL svn:/xxx.com/repo/branches/100_Branch
svn ci -m 'merge 100 branch'
发布

给当前主干打个标签,并且这个标签不再改动了,但是实际上标签和分支是一个意思,你可以在标签上继续做改动,但这不推荐。

     
     
svn copy/cp svn://xxx.com/repo/trunk svn://xxx.com/repo/tags/RB-1.0
合并主干到分支
     
     
svn merge -r LastRevisionMergedFromTrunkToBranch:HEAD svn:/xxx.com/repo/branches/99_Branch

解决冲突

当发生冲突的时候,会提示如下信息:

Conflict discovered in ‘index.html’.

Select: (p) postpone, (df) diff-full, (e) edit,

(mc) mine-conflict, (tc) theirs-conflict,

(s) show all options:

svn detects that theres a conflict here and require you to take some kind of action.

如果你输入s选项,则会列出所有svn解决冲突的选项,如下所示:

(e) edit - change merged file in an editor #直接进入编辑

(df) diff-full -show all changes made to merged file #显示更改至目标文件的所有变化

(r) resolved -accept merged version of file

(dc) display-conflict -show all conflicts(ignoring merged version) #显示所有冲突

(mc) mine-conflict -accept my version for all conflicts (same) #冲突以本地为准

(tc) theirs-conflict -accept their version for all conflicts (same) #冲突以服务器为准

(mf) mine-full -accept my version of entire file (even non-conflicts) #完全以本地为准

(tf) theirs-full -accept their version of entire file (same) #完全以服务器为准

(p) postpone -mark the conflict to be resolved later #标记冲突,稍后解决

(l) launch -launch external tool to resolve conflict

(s) show all -show this list

一般我们会选择p稍后解决冲突,这样会生成三个文件:.mine, .rOLDREV, .rNEWREV。比如:

     
     
index.html
index.html.mine
index.html.r1
index.html.r2

解决冲突方法大致有一下几种:

手工修改index.html文件,然后将当前index.html作为最后提交的版本

     
     
svn resolve index.html –-accept working

选择base版本,即index.html.rOLDREV作为最后提交的版本

     
     
svn resolve index.html –-accept base

使用index.html.rNEWREV作为最后提交的版本

     
     
svn resolve index.html –-accept theirs-full

使用index.html.mine作为最后提交的版本

     
     
svn resolve index.html –-accept mine-full
// 或者用下面这条命令也可以
// svn resolve index.html –-accept theirs-conflict

提交代码

最后,一切确认没问题了:code review完毕,自己觉得代码满意了;然后也合并完别人的修改并且没有冲突了。那么就提交代码吧:

     
     
svn commit/ci -m 'message'

导出代码

你想把你的代码导出,不包含svn版本信息,那么你可以:

     
     
svn export svn://xxx.com/repo/branches/ test folder(本地目录)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值