Svn 在项目中使用主干、分支和标记

Svn 在项目中使用主干、分支和标记,svn,tags,branch,trunk,Svn,Tags,Branch,Trunk,我知道这个理论,但是如何从实际的角度将svn用于项目?比如说,我有一个网站,其功能将被修改或添加。在什么情况下会使用新的主干、分支和标记?我想说的是一个主干,其中“稳定”的非常小的更改(可能是小的错误修复)不会破坏您的构建 应为新功能/大更改创建分支。在分支机构运行期间,分支机构应随着主干的变化保持最新 完成新功能后,分支应合并回主干,然后可以删除分支 标签用于发布。e、 g.v1.2我想说的是一个单独的主干,其中“稳定的”非常小的更改(可能是小的bug修复)不会破坏您的构建 应为新功能/大更改

我知道这个理论,但是如何从实际的角度将svn用于项目?比如说,我有一个网站,其功能将被修改或添加。在什么情况下会使用新的主干、分支和标记?

我想说的是一个主干,其中“稳定”的非常小的更改(可能是小的错误修复)不会破坏您的构建

应为新功能/大更改创建分支。在分支机构运行期间,分支机构应随着主干的变化保持最新

完成新功能后,分支应合并回主干,然后可以删除分支


标签用于发布。e、 g.v1.2

我想说的是一个单独的主干,其中“稳定的”非常小的更改(可能是小的bug修复)不会破坏您的构建

应为新功能/大更改创建分支。在分支机构运行期间,分支机构应随着主干的变化保持最新

完成新功能后,分支应合并回主干,然后可以删除分支


标签用于发布。e、 g.v1.2不同的组织做的事情非常不同。Alex在上面给出的解决方案是一个常见的解决方案,但是它遇到了这样一个问题,即在您建立分支后,您只会发现其他分支与您的分支存在冲突。这导致人们不得不调试一些他们在一段时间内没有看过的东西中的冲突

我遇到的另一种常见方法是在主干中进行所有开发,并使开发人员使所有提交都变小、独立、提交。有多种方法可以添加功能,并在默认情况下使其不可见,但在开发副本中已启用。使用它们。这种方法需要开发人员小心,但避免了管理寿命较长的分支之间的冲突带来的痛苦

很多使用Alex解决方案的人会跳上跳下,说:“这对一个小团队以外的任何事情都不起作用!”对此,我回答说,小团队没有错,他们的生产力通常远远超过大团队所能做的任何事。如果开发人员有纪律,例如谷歌使用纪律,这种策略可以扩展。如果您想看到使用该策略的实际项目,请查看


还有一些建议。如果你想遵循Alex的策略,我强烈建议使用git而不是svn。它比svn更好地处理分支。如果您希望遵循我建议的策略,并且您的团队不是一个有您信任的人的小团队,那么您需要使用代码审查工具来减少可能出现的明显问题。

不同的组织会做非常不同的事情。Alex在上面给出的解决方案是一个常见的解决方案,但是它遇到了这样一个问题,即在您建立分支后,您只会发现其他分支与您的分支存在冲突。这导致人们不得不调试一些他们在一段时间内没有看过的东西中的冲突

我遇到的另一种常见方法是在主干中进行所有开发,并使开发人员使所有提交都变小、独立、提交。有多种方法可以添加功能,并在默认情况下使其不可见,但在开发副本中已启用。使用它们。这种方法需要开发人员小心,但避免了管理寿命较长的分支之间的冲突带来的痛苦

很多使用Alex解决方案的人会跳上跳下,说:“这对一个小团队以外的任何事情都不起作用!”对此,我回答说,小团队没有错,他们的生产力通常远远超过大团队所能做的任何事。如果开发人员有纪律,例如谷歌使用纪律,这种策略可以扩展。如果您想看到使用该策略的实际项目,请查看


还有一些建议。如果你想遵循Alex的策略,我强烈建议使用git而不是svn。它比svn更好地处理分支。如果您希望遵循我建议的策略,并且您的团队不是一个有您信任的人的小团队,那么您需要使用代码审查工具来减少可能出现的明显问题。

请看以下两篇文章:


来自的链接更多地讲述了您似乎想要采用的策略,而其他策略,如按发布分支。每篇文章都概述了每种策略的优缺点。

看看这两篇文章:


来自的链接更多地讲述了您似乎想要采用的策略,而其他策略,如按发布分支。每篇文章都概述了每种策略的优缺点。

我的拙见:合并分支很可怕。在许多情况下,不同开发人员所做的更改是完全独立的,因此可以顺利合并。但在任何繁忙的项目中,都会有变更冲突的时候。如果幸运的话,SVN会识别冲突并在合并时给您错误。如果你运气不好的话,SVN不会捕获它,但它无法编译。不管怎样,现在总得有人想办法把这些变化放在一起。有时这是显而易见的,也很简单。但我有很多次不得不让做出更改的开发人员聚在一起,这样我们才能知道该怎么做

如果您非常不走运,SVN和编译器都看不到问题,冲突的更改进入生产,并且程序行为不正确

从这一观察中,我得出两个结论:(a)尽可能减少分支。或者更准确地说,制定策略,尽可能少地进行合并。(b)在代码仍处于测试阶段时对代码进行合并

有一段时间,我的公司有一个分支策略,即每个项目都有自己的分支,并在该分支上进行测试,然后