在用svn的时候,我们通常会使用下面的目录结构
projectname
-head
-branches
-tags
通常的做法是我们在需要一个新的分支的时候,从head创建一个分支到branches下面,比如叫release1. 开发完成后,上production结束,将head打一个tag,然后将release1的代码merge回head.
但是在实际开发中我经常发现有一些人从head拿出代码后直接开发,开发完了后断开svn,然后重新提交到branches下面。这样子就有一个问题,分支不是head创建出来的,当我们想把这个分支的代码merge回head的时候,就不能用 "Reintegrate a branch",如果你用这个会报错,提示说这两个分支没有父子关系,只能使用第一种方式"Merge a range of revisions", 其实使用这种方式理论上来说应该也没有问题,但是我在实际使用的时候发现了一个很奇怪的现象:
当你从head checkout出来,然后改了很多类,然后提交到branches下面生成一个新的分支。这时候你用head去merge这个分支的代码会发现一个都merge不到,但是你用compare去比对又发现很多不一样的类,但是merge死活提示没有更新。然后你在这个新的分支下再修改一个类,再提交,你会发现head能merge到这个新提交了类。我找了很多资料,也去看了svn的日志和文件的版本,没有找到背后的根本原因是什么,可能还是我对svn的原理不熟悉,我想以后多用命令行的方式去执行应该能有更多的发现,