SVN分支详解

http://sunjun041640.blog.163.com/blog/static/2562683220119189950865/?suggestedreading&wumii

 

在项目目录下有三个目录
a) trunk--------主干, 线上环境运行的就是这个代码.
b) branches----分支, 仅限开发, 合并使用. 通常是以项目名字命名子目录,一般在aone上新建的小需求时,aone就会自动新建分支.
c) tags---------标记 aone一般用来合并发布当天所有和这个代码模块相关的小需求代码,然后统一进行编绎

我们接触最多的是branches,branches开发工程师可以申请读写权限,trunk我们是没有写权限的,只有读权限。
常用SVN命令:

最全的还是使用svn help命令
在命令行中输入svn help,会显示svn 的所有子命令及全局参数;
在命令行中输入svn help commond 会显示commond 的使用方法及参数; 如svn help ci

1.新拉分支命令:

应用场景:
a.当有代码模块有新的发布时,主干上有更新,需要从主干上新拉分支,将当前开发分支的代码合并到新的分支上去,以保持开发分支上的代码与主干是一致
b.当有新的功能点要开发,而不想与其它功能点在一起互相影响,需要从主干上新拉分支
*命令格式:*svn copy trunk_url branch_url -m "comments"
执行路径:在命令行的任意路径执行均可
参数说明:
trunk_url:一般是从主干上新拉分支
branch_url:分支地址 分支的命令方式,一般是日期_分支功能点_num 当然,这个名字很灵活了,最好的是能让人一眼看出这个分支是做什么功能点用的,num是1 2 3 。。。
*例如:*给测试同学测试多域名分支用的拉分支命令:
svn copy apath bpath -m "reason"

2.从svn 中检出代码到本地工作空间

应用场景:需要在本地跑应用,或是查看代码,你懂的。
命令格式:svn co URL[@REV]... [PATH]
执行路径:在本地想要存放代码的路径中执行
参数说明:
URL[@REV]:想要检出的代码URL路径 REV是版本号,如果不写REV,则默认检出最新代码
PATH:如果不写Path,则url的最后一段将作为文件夹名称(分支名称)
例如:将分支20110805_test_multi-domain_1的代码co到本地 当前路径:
svn co xxxxxxxx .<这里有个点哟>


3.查看svn 提交记录:

应用场景:需要查看指定分支的修改记录
命令格式:
svn log [PATH] 显示本地 PATH (默认: ".") 的日志信息。默认的版本范围是 BASE:1
svn log URL[@REV] [PATH...] 显示 URL 中 PATH (默认: ".") 的日志信息。默认的版本范围是 BASE:1
执行路径:如果没有PATH参数 ,则需要在本地工作拷贝所在路径执行; 如果指定了URL,在任意路径均可执行
*有个特别的参数:--stop-on-copy:*日志一直打到当前分支从日志主干上拉下来为止,这个很有用的哟
-l num :看num条
-v:查看每条修改记录中,都有哪些文件改动过了
例如:查看分支20110802_68007_multi-domain_7从分支开始创建到最新代码之前所有的日志
svn log http://svnxxxxxxxx --stop-on-copy

查看分支20110802_68007_multi-domain_7的最新三条日志
svn log http://svn.xxxxxxx -l 3

查看分支20110802_68007_multi-domain_7的最新一条日志,并查看都有哪些文件被修改过了
svn log http://xxxxxxx -l 1 -v


4.合并代码命令:

例如:
svn merge -r 32129:head http://svn.xxxxxxx --dry-run

执行路径:想要合并到的目标分支所co到本地的路径
如想将xxxxxxxx上的32129到最新版本的所有修改合并到bbbbbbbbbb上,本地先将 20110805_test_multi-domain_1的代码co到${user.home}/work/intl-iris下,然后, 在${user.home}/work/intl-iris下运行svn merge 命令

有个特别的参数:--dry-run,就是预合一下,并未真正的将改动合并到本地,一般可以使用这个命令查看一下有哪些文件会合并进来,有没有冲突的文件
如果不加--dry-run,则改动合并到本地工作拷贝了
5.查看当前工作拷贝有哪些修改:

命令格式:svn st [PATH...]
如果不指定path,则是查看当前目录与svn上最新代码相比较的修改,如果指定path,则查看指定路径下的修改。

执行路径:当前工作拷贝路径下 

6.提交修改的代码:

命令格式:svn ci -m 'comments' [PATH...]
提交代码时,一定要写comments,以说明这次是什么修改,如果是合并代码的提交,要按如下格式书写:
Merging 20110802_68007_multi-domain_7 r32130 through r33590 into 20110805_test_multi-domain_1
含义即为:20110802_68007_multi-domain_7这个分支上r32130 到 r33590 的修改合并到了分支20110805_test_multi-domain_1上

如果不指定path,则将当前目录下的所有修改提交到SVN
执行路径:如果指定绝对path,则可以在任意路径下执行,如果不指定path,或是指定的是相对路径,则需要在工作拷贝路径下执行。

请注意,如果是想要合并代码,如果有staus为C(冲突)的,测试同学一定要联系开发同学帮助合并,解决冲突。因为状态为conflict时,svn 是不允许提交的

同时,请养成一个习惯,先从svn库上更新最新的代码 (svn up),再提交,以免提交时,出现冲突
7.将冲突标记为解决:

命令格式:svn reloved [path...]
将冲突的文件标记为解决,svn 在收到这个命令后,会将本地因冲突产生的三个新文件删除。如果不指定Path ,会将当前目录及子目录下所有冲突状态的文件标记为解决

切记:提交前,如果工作空间下有冲突的文件,一定要先解决冲突,再将文件标记为己解决,最后再提交
8.切换分支:

命令格式:svn sw url
切换到指定分支中,在切换时,本地的修改不会丢失,但是svn 地址会切换到新路径下

*执行路径:*本地工作拷贝路径,如果不在正确的路径运行该命令,会失败的
例如:svn sw http://xxxxxxxxx

你可能感兴趣的:(工作,SVN,url,Path,Comments,branch)