教程:Apache Subversion最佳实践

发布于:2021-02-15 00:00:28

0

302

0

apache subversion svn 教程 版本控制

版本控制是软件开发的有用工具,尤其是当一个项目涉及多个开发人员时,apache subversion仍然是世界上最流行的开源版本控制系统之一。它也是最成熟的,拥有一个充满活力的客户端工具、gui和插件生态系统,可以满足您所有的版本控制需求。

然而,有一些潜在的陷阱需要注意,特别是对于颠覆新手。您应该如何构建存储库?如何实现一个不会让你头痛的分支和合并策略?

在本文中,我们将介绍apachesubversion的一些基本最佳实践,包括存储库结构、项目布局,以及最后的分支和与SVN的合并。

存储库结构

apachesubversion没有强加严格的文件结构,它允许您优化存储库布局以满足项目的特定需要。然而,所有这些自由都会导致不必要的管理开销——从一开始就实现正确的项目布局是至关重要的。

在启动新项目时,首先需要回答的问题之一是:我应该为多个项目使用单个存储库,还是为每个项目使用单独的存储库?

单个存储库

单个存储库通常最适合于需要交叉跟踪和交叉引用的多个项目。单一存储库方法的好处是,只有一个位置可以访问所有代码,并且可以在项目之间轻松共享资源(例如库)。管理开销通常也较少,因为新项目不需要新的存储库,而且数据可以在项目之间移动,而不会丢失任何版本控制信息。但是,也有一些缺点:执行管理任务(例如转储和加载一个巨大的存储库)将更加耗时,特别是因为项目的规模有增加的趋势。另一个值得记住的问题是Subversion将其修订号应用于整个树;这意味着无论进行什么更改,所有项目的修订号都将同时增加。

多个存储库

它们通常用于多个不相关的项目。多个存储库为用户提供了定制每个存储库以适应单个项目的自由,并确保版本号对每个项目都有意义。但是,共享代码可能会成为一个问题,因为Subversion不支持在存储库之间合并代码,合并的代码随后将出现在新的repo中,而没有历史记录。

项目布局

一旦决定了是在单个存储库结构中还是在多个存储库结构中组织项目,下一步就是规划项目布局。事先考虑一下布局,可以省去以后移动文件的管理麻烦。

对于大多数项目,遵循主干/分支/标记布局并明确区分每个项目中包含的代码是一种很好的做法:

Trunk –仅在此处存储当前版本代码!主干应该始终是稳定的和可编译的。

Tags –这些标记用于提供项目历史中特定点的代码快照。

Branches –用于处理代码的重大更改、变体等,而不会中断主干中的稳定代码。

一个快速的互联网搜索将会发现无数关于分支和合并的故事,但是如果使用得当,分支和合并对于Subversion用户来说是一个非常宝贵的工具。遵循一些最佳实践可以确保您充分利用Subversion强大的分支和合并功能。

合并最佳实践

  • 始终从签出或更新开始–始终确保您拥有主干中的最新代码,并在开始合并之前已提交所有更改。

  • 合并逻辑检查点–在大多数情况下,当分支达到一定的稳定性和成熟度水平时,合并是有意义的。对分支进行实验性更改后,切勿合并。

  • 始终使用日志消息–几个月后,当您需要检查合并发生的时间,合并发生的更改等情况时,这些消息可能是宝贵的信息来源。您在日志消息中提供的相关信息越多越好。

  • 很快合并–您可以更快地执行合并并将所做的更改提交回存储库,团队的其他成员可以更快地在自己的开发工作中考虑到您的更改。

  • 隔离合并–可能很容易合并,然后在执行提交之前进行一些其他更改。但是,如果您需要重新访问此修订,将很难区分哪些更改来自合并,哪些更改是其余开发工作的一部分。

  • 运行频繁的“ SVN更新” -即使您的分支似乎与干线中正在进行的工作没有任何关系,但是当您完成分支的完善时,干线可能已经发展到难以解决的地步合并。执行定期更新,以确保所有新提交都适合您自己的更改。

  • 遇到问题了吗?刚开始!–如果合并没有按计划进行,则始终可以放弃工作副本中的更改并重新开始。还原将覆盖存储库中代码的所有本地更改。它使用“ svn revert”命令,后跟工作副本的位置 (图2):

提示:TortoiseSVN是流行的用于Windows的Subversion客户端,它有一个有用的tsvn:日志大小'属性,该属性可以确保所有团队成员都留下日志消息。要设置此属性:

从TortoiseSVN菜单中选择properties选项。在随后的属性对话框中,选择“新建”属性并单击“日志大小”。(图3)。

指定提交消息的最小字符数。TortoiseSVN将阻止任何日志消息短于指定字符的提交。(图4)

 

分支最佳实践

  • 删除不需要的分支–在Subversion中删除分支对存储库大小没有影响,因为该分支仅从有问题的修订版和所有后续修订版中删除。删除的分支仍存在于所有以前的修订中,可以随时查看和恢复。尽管删除分支并不能节省空间,但仍应删除不需要的分支,如果:您已成功执行了合并–合并后,该分支变得完全冗余,应将其删除。您已经运行了-reintegrate命令–该命令指示Subversion比较主干和分支,并将结果差异应用于主干。一旦执行了“重新整合”合并,分支就不能再用于开发,因为任何未来的重新整合都将被解释为主干更改。为避免这种情况,合并后应始终删除分支。或者对于一般的内务管理-定期删除分支有助于减少分支目录中的混乱,使您可以一眼就看到活动开发。

  • 测试,测试,测试-考虑对功能分支进行CI和断言测试,这是表示代码成熟度和进度的有用方法。

  • 跟踪分支——如果您同时维护多个分支,很容易失去跟踪。TortoiseSVN的“修订图”功能通过分析修订历史和创建分支之间关系的图形表示,帮助您了解不同的分支。

在修订图中,每个节点代表一个修订,其中有更改,并且每个更改由不同颜色的形状表示。(图5)

  • 添加或复制的项目–项目已添加到Subversion,或通过复制现有文件/文件夹创建。

  • 分支提示修订–这表示每个分支的标题修订节点。请注意,该头不是指存储库中的最新版本,而是指在该路径上提交的最新版本。(图6)。

  • 已删除的项目–已删除的分支。

  • (可选)工作副本修订版–如果从“查看”菜单中选择“显示WC修订版”选项,则基本修订版将以粗体轮廓显示。(图7)