SVN merge命令合并trunk的一些版本到分支

这里主要是先描述问题产生的场景,然后给出答案,并少量设计了代码工作流方面的话题,但并没有做重点阐述。

使用版本控制软件对代码变更进行追踪只是第一步,更进一步,我们还需要基于版本控制软件为团队开发定义工作流,并一直坚持相同的习惯。对于Git有Git flow, Github flow, Gitlab flow等等。对于之前比较流行的SVN也是如此。SVN的团队开发流程不止一种,常见的也是有单个长期分支的工作流和开发分支,线上分支双分支工作流。

我们使用SVN进行代码管理的项目使用的是后者,也就是开发分支,线上分支分开,然后通过合并(Merge)来决定哪些版本上线,更进一步,我们使用Redmine进行任务管理,和SVN整合后,任务相关的版本是整合到一起的显示的。

为了得到一个任务(我们叫Ticket)的全部版本号(Revision),我们写了一小段JS代码在浏览器Redmine任务页面的Console里执行,如果小伙伴们有更好的获取一个Ticket下的版本号的方法,可以和我交流一下。

var scriptNode = document.createElement('script'); scriptNode.src = 'http://code.jquery.com/jquery-1.10.1.min.js'; document.head.appendChild(scriptNode);
var version = '';
$('.changeset > p > a').each(function(i){
version += $(this).text().replace('修订 ', '') + ',';
});
console.log(version );

PS:里面的修订两个字也可能是Revision,取决于Redmine当前语言是中文还是英文。

然后就会得到类似于下面这样的输出:

40643,40645,40646,40647,40648,40649,40650,40652,40655,40660,40668,40669,40702,40704,40708,40709,40710,40712,40718,40719,40720,40721,40722,40723,40724,40726,40727,40728,40729,40730,40731,40732,40733,40734,40735,40736,40737,40738,40739,40740,40741,40742,40746,40747,40748,40749,40751,40753,40754,40755,40756,40757,40766,40770,40772,40774,40786

接下来为了将这些代码上线,我们就需要知道怎么将Trunk上面的这些代码变更合并到线上分支。当然Tortorise SVN软件内置了这样的功能,但是对于有的钟爱命令行的人士来说,还是要学会如何使用命令行来做这件事。

说了这么多,其实答案很简单,这里我直接给出答案:

cd WWW_WORKING_COPY_DIR
svn merge -c 40643,40645,40646,40647,40648,40649,40650,40652,40655,40660,40668,40669,40702,40704,40708,40709,40710,40712,40718,40719,40720,40721,40722,40723,40724,40726,40727,40728,40729,40730,40731,40732,40733,40734,40735,40736,40737,40738,40739,40740,40741,40742,40746,40747,40748,40749,40751,40753,40754,40755,40756,40757,40766,40770,40772,40774,40786 TRUNK_REPO_URL .

这里TRUNK_REPO_URL支持绝对路径和将对路径,如果是将对路径,是基于跟进行寻址的,比如^/trunk。

当然,有可能会产生冲突,个人比较推荐的方式是一律保留冲突继续,然后一起处理。