﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-JAVA学习笔记-随笔分类-SVN</title><link>http://www.blogjava.net/lingy/category/39875.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 23 Jun 2009 04:52:35 GMT</lastBuildDate><pubDate>Tue, 23 Jun 2009 04:52:35 GMT</pubDate><ttl>60</ttl><item><title>如何使用svn进行merge</title><link>http://www.blogjava.net/lingy/archive/2009/06/02/279544.html</link><dc:creator>林光炎</dc:creator><author>林光炎</author><pubDate>Tue, 02 Jun 2009 04:36:00 GMT</pubDate><guid>http://www.blogjava.net/lingy/archive/2009/06/02/279544.html</guid><description><![CDATA[<div id="articlebody"><span style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: 13px arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px" class="Apple-style-span">
<div style="padding-bottom: 0px; margin: 0px 0px 0.75em; padding-left: 0px; padding-right: 0px; padding-top: 0px" class="asset-header">
<div style="padding-bottom: 0.3em; margin: 0.25em 0px 0px; padding-left: 0px; padding-right: 0px; font-size: 11px; border-top: rgb(216,232,245) 1px solid; font-weight: normal; padding-top: 2px" class="asset-meta"><span class="byline">By 尹伟铭(Weiming Yin) on April 9, 2008 12:45 AM<span class="Apple-converted-space">&nbsp;</span></span><span class="separator">|</span><span class="Apple-converted-space">&nbsp;</span><a style="outline-style: none; color: rgb(102,153,204); font-weight: bold; text-decoration: underline" class="permalink" href="http://yinwm.cn/blog/2008/04/svn-merge.html">Permalink</a><span class="Apple-converted-space">&nbsp;</span>|<span class="Apple-converted-space">&nbsp;</span><a style="outline-style: none; color: rgb(102,153,204); font-weight: bold; text-decoration: underline" href="http://yinwm.cn/blog/2008/04/svn-merge.html#comments">Comments (0)</a><span class="Apple-converted-space">&nbsp;</span>|<span class="Apple-converted-space">&nbsp;</span><a style="outline-style: none; color: rgb(102,153,204); font-weight: bold; text-decoration: underline" href="http://yinwm.cn/blog/2008/04/svn-merge.html#trackback">TrackBacks (0)</a></div>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" id="cr-1">版权声明：可以任意转载，转载时请务必以超链接形式标明文章<a style="outline-style: none; color: rgb(102,153,204); font-weight: bold; text-decoration: underline" href="http://yinwm.cn/blog/2008/04/svn-merge.html">原始出处</a>和作者信息。</div>
</div>
<div style="position: static; padding-bottom: 0px; margin: 5px 0px; padding-left: 0px; padding-right: 0px; clear: both; padding-top: 0px" class="asset-content">
<div style="padding-bottom: 0px; margin: 0px 0px 0.75em; padding-left: 0px; padding-right: 0px; height: 1%; clear: both; padding-top: 0px" class="asset-body">svn 的 merge其实很好用，当然前提是你明白了svn merge这个命令，还好，我用了大约一年明白了这个命令 -___-!!<br />
<br />
跟大家说一下用法，比如我们要把分支merge到主干上<br />
<br />
# svn merge --help<br />
merge: Apply the differences between two sources to a working copy path.<br />
usage: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. merge [-c M | -r N:M] SOURCE[@REV] [WCPATH]<br />
<br />
我们以第一个为例<br />
merge sourceURL1[@N] sourceURL2[@M] [WCPATH]<br />
这个help里面提示，merge需要三个参数<br />
sourceURL1，sourceURL2的含义并不是两个分支，或者一个分支一个主干，而是同一个分支的两个状态，或者说是两个版本。对这两个版本做一个diff，然后把diff的结果，应用到最后的参数WCPATH上，WCPATH代表是一个本地已经checkout的工作区<br />
<br />
svn merge的思想是diff and apply<br />
<br />
比如，我开发一个项目叫做proj<br />
目录结构是<br />
proj/trunk<br />
proj/branches<br />
proj/tags<br />
<br />
(省略了http:// 之后的，只是相对路径，但是真正使用时候不能省略)<br />
<br />
当版本达到100的时候，我决定做一个branch进行一些其他开发<br />
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" id="1hpp" class="ArwC7c ckChnd">&nbsp;[Reversion:100]<br />
&nbsp;$svn cp proj/trunk proj/branches/proj_branch_1<br />
&nbsp;OK Reversion:101<br />
<br />
然后，trunk和proj_branch_1都在开发<wbr></wbr>，到了某一个版本，比如150，branch开发完成<wbr></wbr>，需要merge回到trunk<br />
此时的目录结构是<br />
[Reversion:150]<br />
proj/trunk<br />
proj/branches/proj_branch_1<br />
proj/tags<br />
<br />
按照svn的实现，我需要知道proj_branch<wbr></wbr>_1所做的所有的变化，也就是当前的状态对刚刚生成时候状态的变<wbr></wbr>化。根据这个变化生成一个diff文件，在apply一个本地的工作<wbr></wbr>区上。（建议是一个干净的本地trunk工作区）<br />
<br />
那么执行<br />
$cd proj/trunk<br />
$svn merge proj/branches/proj_branch_1<wbr></wbr>@101 proj/branches/proj_branch_1 .<br />
<br />
其实，第一个URL（我们称之为左边），为起始状态，通过最后的<wbr></wbr>@101，表示取版本101，这个101就是cp成功之后的那个<wbr></wbr>版本。第二个URL（我们称之为右边），为最终状态，取最新的，<br />
&nbsp;左边和右边做了一个diff，应用到当前工作区目录<wbr></wbr>，也就是trunk。<br />
&nbsp;此时<br />
&nbsp;$svn st就可以看到变化了<br />
<br />
这里的一个问题是如何获取这个cp之后的版本，也就是例子中的1<wbr></wbr>01<br />
可以使用svn log里面的--stop-on-copy命令<br />
$svn log --stop-on-copy proj/branches/proj_branch_1<br />
会到cp的时候停下来，那里边标注的版本就是需要的版本<br />
<br />
&nbsp;比如，这是一个真正项目的一个例子，<br />
&nbsp;------------------------------<wbr></wbr>------------------------------<wbr></wbr>------------<br />
&nbsp;r995 | yinweiming | 2007-10-24 09:07:08 +0800 (三, 24 10月 2007) | 1 line<br />
<br />
&nbsp;Create a branch for proj client using<br />
&nbsp;------------------------------<wbr></wbr>------------------------------<wbr></wbr>------------<br />
&nbsp;其中的r995，995就是我需要的版本<br />
&nbsp;（说明一下，commit时候写commet的好处<wbr></wbr>，比如这里我就很明确的肯定这是branch的起始点）<br />
<br />
对于svn merge的另外的用法也是类似，只要是明白了<br />
他是根据左边，右边生成diff，然后应用到本地的一个工作区就<wbr></wbr>容易理解了。<br />
<br />
还有可以使用svn merge --dry-run来模拟假装merge一下，看一下merge<wbr></wbr>会发生什么，而不是真正的做这个动作。<br />
<br />
<br />
而对于merge的help里面的 3. merge [-c M | -r N:M] SOURCE[@REV] [WCPATH]<br />
这个也很容易理解，就是取 SOURCE 这个东西，版本N，M之间的区别，作用在WCPATH这个本地工作区上<br />
<br />
注意！<br />
做branch千万别根据本地修改过的工作区做，一定基于某一个URL的版本做<br />
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" id="1hpp" class="ArwC7c ckChnd">我就吃过这个亏<br />
diff的时候，diff不出来，因为基于本地工作区的<wbr></wbr>，所以现在merge起来很是费劲</div>
</div>
</div>
</div>
</span></div>
<img src ="http://www.blogjava.net/lingy/aggbug/279544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lingy/" target="_blank">林光炎</a> 2009-06-02 12:36 <a href="http://www.blogjava.net/lingy/archive/2009/06/02/279544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>svn: This client is too old to work with working copy..　</title><link>http://www.blogjava.net/lingy/archive/2009/05/20/271703.html</link><dc:creator>林光炎</dc:creator><author>林光炎</author><pubDate>Wed, 20 May 2009 05:42:00 GMT</pubDate><guid>http://www.blogjava.net/lingy/archive/2009/05/20/271703.html</guid><description><![CDATA[svn: This client is too old to work with working copy ; 由于svn工作拷贝目录下都有个.svn目录，里面保存着svn需要的一些版本信息等，当客户端软件升级后，里面的信息也相应增加以支持更多的特性。比如如果你在终端下用1.4版本的svn客户端co了一份代码，然后到windows下用tortoiseSVN去操作，会在.svn里增加一些文件。那么以后你再想回到1.4版本去工作，就会有兼容性错误，因为老的客户端(如：subclipse 1.0.6)无法识别那些，所以会报错："svn: This client is too old to work with working copy '.'; please get a newer Subversion client". <br />
<br />
用下面这个脚本就可以解决了，来自tortoiseSVN官网： <a href="http://www.blogjava.net/Files/lingy/change-svn-wc-format.rar">http://www.blogjava.net/Files/lingy/change-svn-wc-format.rar</a> &nbsp;用法如：<br />
<br />
python change-svn-wc-format.py ./projctName "1.4" --verbose<br />
<br />
<br />
附件：在文件中。。。。。<br />
<br />
<br />
还好我在windows下装了 python ，顶python ~<br />
<br />
 <img src ="http://www.blogjava.net/lingy/aggbug/271703.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lingy/" target="_blank">林光炎</a> 2009-05-20 13:42 <a href="http://www.blogjava.net/lingy/archive/2009/05/20/271703.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>