我一直在Trunk工作,因为我应该为一些重大变化创建一个分支(Subversion,TortoiseSVN)

时间:2011-04-22 20:37:39

标签: svn tortoisesvn

我开始进行一系列重大更改,触及应用程序的许多不同区域,需要更改数据库架构,我们的对象和表示代码。我从rev.1101开始你可以认为这是一个完美的案例,可以创建一个Branch,以便稍后在测试和完成后合并并集成回Trunk。

但我没有创建新分支。我一直在研究Trunk。

Here is the situation we started with

Trunk现在处于rev.1116并且我处于一个令人尴尬的(?)位置,我必须在15个版本的修订版上执行一些错误修正,这是当前版本的生产,然后发布bugfixed“rev。 1101 +错误修正“没有任何来自转速1102-1116的作品。

问题:如何“恢复”Trunk并将所有最近的更改移动到分支?我是否立即从Trunk中的内容创建一个分支,它变为/ Branches / MajorChangeSet,然后将Trunk恢复为rev.1101,将其视为现在正式的Trunk并开始处理那里的错误修正工具?

A map of our SVN revisions, branches, etc.

更新:我按照下面ChrisH推荐的程序(根据上面的模型),我们现在状态很好。我们一直在通过修复和次要功能增强来更新“rev.1102产品”。这些都是无痛的,很容易合并到主干中,以确保这些变化也成为我们新的开发工作。谢谢大家!

Branch v. Trunk | Branch/Tag/Trunk? | Branch when?

4 个答案:

答案 0 :(得分:5)

我建议每次开始发布候选版本时创建一个发布分支。 Trunk保持活着,可以处理发布中没有的内容(版本.next,正如我们所说)。发布分支仅保留用于错误修复和必须在发布中的内容。最好先将它们提交到trunk,然后将它们合并到发布分支。总是尝试将FROM trunk合并到其他分支,因为这样可以使事情变得更容易。将“功能分支”重新集成到主干中是很好的,但是应该避免在发布分支中修复错误然后将其合并回主干。

在发布之后,发布分支会被保留以修复其他错误并最终进行小点发布。您仍然应该首先修复主干中的错误(没有将它们放在.next版本中)并将它们合并到您仍在积极维护的每个版本分支中。

好消息是你可以在事后启动这种方法。返回到当前版本的主干版本,并从中创建一个发布分支。当您在日志查看器中右键单击修订版时,TortoiseSVN有一个方便的菜单,用于从特定修订版创建标记和分支。

获得发布分支后,您需要检查它并开始合并您要发布的错误修复程序。你在树干上的所有新工作都保持在原地。如果trunk和release分支显着不同,那么你可能需要直接在release分支上进行修复,但是尝试在trunk中进行修复并尽可能合并到release分支。

还有一件事。每次从发布分支发布发行版时,都应该使用发行版的版本标签复制到标记。稍后可以方便地找出版本之间发生了哪些变化,或者如果需要,可以重建旧版本。因为我们在产品版本中嵌入了SVN修订版号,所以我们会在发布版本时完成标记的完整构建,这样如果客户报告错误,我们就知道他们正在运行什么代码(因为SVN版本是唯一的)整个存储库)。

希望有所帮助,祝你好运。

答案 1 :(得分:0)

一种方法是为每个主要版本创建一个分支,您可以在其上应用错误修复,而不依赖于主干中正在进行的任何工作。

要追溯创建分支,请尝试:

svn copy http://svn/path/to/trunk@1101 \
         http://svn/path/to/branches/last_monday_release

@1101 peg revision - 基本上我们说“找出修订版1101中引用的trunk,然后复制它以创建分支”。< / p>

(如果你有勇气的话,SVN书籍有scary explanation挂钩版本

答案 2 :(得分:0)

嗯,无论你怎么看待它都会有点混乱,但你也没有做过任何明显的错误。你只需继续在你的主干中进行开发 - 这是正确的 - 但现在你需要回到之前的版本并添加一些更改然后重新发布。

问题似乎是你有一系列的错误修复和新功能的修订,你只是试图从某个时间点开始捕获错误并忽略其他一切。如果错误修复是在离散修订中(至少为了识别目的),它会更容易一些,但通常它们会伴随其他更改。

两个选项:

  1. 获取您发布的最新修订版的分支,然后手动移动修复错误。
  2. 取一个修复了错误的最新版本的分支,然后删除新功能。
  3. 根据新功能和错误修复之间的平衡,其中一个可能比另一个更容易。无论哪种方式,您都希望最终得到一个分支,特别是对于此版本。

答案 3 :(得分:0)

解决此问题的一种方法是

  • 从HEAD of trunk
  • 创建一个工作分支
  • 删除主干
  • 在意外更改之前从主干版本重新创建主干

这样你就不会在后备箱上看到日志/责备中的意外提交和转换。但是在更新工作副本时要注意 - 我不确定svn update如何处理删除和重新创建存储库位置。