2009-10-02 83 views
8

我们目前有2个分支:SVN垫底和历史丢失

/repo/branch/current_version 
/repo/branch/next_version 

CURRENT_VERSION是所有开发者当前工作的一个分支。

我们开始下一个版本并创建next_version从current_version中的某个点开始分支,而current_version上的工作仍在继续。在next_version中,我们会进行一些开发,并且在接下来的几个月里,分支将成为我们的主要分支,所有的开发都将完成。

由于current_branch上有开发,我们周期性地(比如说每2周一次)想要调整next_version。这是为了保持两个分支同步,所以当所有开发人员最终都会丢弃current_branch并移动到next_release时,next_release将包含所有current_branch的功能集成和测试。

问题是rebasing。实际上,rebasing正在将current_branch的最新提交合并到next_version。因此,如果我将检查next_release中提交的文件的历史记录,我会看到的是合并提交,而不是current_version的历史记录(提交/作者/注释)。

我想念什么?

回答

20

不,你没有遗漏任何东西。这是使用SVN进行版本控制的一个大问题。

我在上一份工作中一遍又一遍地跑过去。每当有人向current_branch提交了一些内容(坚持你的术语)时,提交消息将不得不手动复制,以便可以在合并提交消息中使用。这很快就成为一个巨大的痛苦。

这就是为什么新版本控制软件具有更好的合并功能(Git,Mercurial和Bazaar出现)的原因。


编辑:显然SVN已经修复了这个问题。 SVN 1.5及更高版本包含merge-sensitive logs and annotations。在svn merge和svn blame中使用标记--use-merge-history(-g)来查看来自合并分支的提交消息。

+4

@ThisSuitIsBlack未被删除的评论关于svn 1.6功能“Merge-Sensitive Logs and Annotationscomment”是我正在寻找的。使用标记-use-merge-history(-g)和svn log/blame将完成这项工作。我也看到1.5中的特性。更新你的答案,我会接受它:) – dimba 2009-10-02 07:53:35