我刚开始使用SVN。 我知道基本命令并理解基本原则。 我想知道在团队环境中使用Subversion的任何提示或最佳实践。
我可以看到提交代码时添加合理且详细的消息的好处,但是还有其他需要注意的事项吗?
感谢所有出色的答案-它们帮了很大的忙。
我刚开始使用SVN。 我知道基本命令并理解基本原则。 我想知道在团队环境中使用Subversion的任何提示或最佳实践。
我可以看到提交代码时添加合理且详细的消息的好处,但是还有其他需要注意的事项吗?
感谢所有出色的答案-它们帮了很大的忙。
鼓励频繁提交代码。 对于刚接触版本控制的团队成员来说,他们可能认为需要将代码保留在代码库之外直到“完全可用”。教导大家早期和经常性地提交代码以便尽早发现问题。建议你的团队针对可能破坏主干的特性创建分支而非等到满意后再提交代码。
确立分支和标记管理规范。 除了为新功能建立分支,还可以鼓励团队使用分支进行业务级别的大型修复。在工作开头和结尾设置重要bug修复的标记。维护生产/质量保证发布的标记(可能包括分支)。
确立主干管理策略并严格执行。 例如,“主干必须始终无错误构建”或“主干必须始终通过所有单元测试”。任何无法满足主干标准的工作都必须在分支中完成。
不要在代码更改中提交格式更改
如果您想重构巨大文件的空格(Control+K+D),可以。 请将格式更改与实际逻辑更改分开提交。 同样,如果您想在文件中移动函数,请单独提交移动操作而不是与实际编辑混为一谈。
我始终坚持的一个关键概念是一起提交相关代码更改。其对应原则是不要在同一个提交中提交无关的代码更改。这意味着不要在一个提交中修复2个错误(除非是相同的修复),也不要在两个提交的每个提交中都提交一半的错误修复。另外,如果我需要为系统的一个不相关部分添加一些新的增强功能或其他内容,然后我需要为其他工作做准备,我会先单独提交增强功能。这个想法是,任何人可能想要单独拥有或回滚的任何更改都应该是单独的提交。当进行合并或回滚失败的功能时,这将为您节省大量头疼。
已经提到了很多内容,以下是更多的建议:
如果你有不想放在源代码控制下的文件(例如配置文件、编译文件等),将它们添加到忽略列表中。这样,通过始终期望未知文件列表为空,您可以注意到任何您忘记添加的文件。
添加一个提交后事件发送电子邮件到开发者邮件列表(或专门用于此目标)相关提交的更改和最好包含其补丁。
与您的缺陷跟踪器集成,以便提交引用显示在缺陷/功能请求上,并带有指向差异的链接。像 MantisBT 这样的缺陷跟踪器支持此功能。
考虑与持续集成(例如 CruiseControl.NET)、NAnt 用于构建以及 NUnit/VS 用于单元测试进行集成。这样,一旦用户提交代码或在计划的时间间隔内,就会编译代码、运行单元测试,并向开发人员反馈该过程的信息。这也将提醒团队其他成员,如果存储库已损坏(即无法构建)。
基础操作:
我想总结一下我坚持的最佳实践:
应该有仓库结构。个人使用以下仓库结构:
/trunk
/tags
/builds
/PA
/A
/B
/releases
/AR
/BR
/RC
/ST
/branches
/experimental
/maintenance
/versions
/platforms
/releases
您可以在以下形式的图表中找到我使用的软件配置管理方法的主要原则概述。
与您的缺陷跟踪软件进行集成。如果您使用Bugzilla,则可以设置它,以便如果您的评论以“Bug XXXX”开头,则您的SVN评论会自动添加为该缺陷的评论,包括指向该修订版本的SVN Web界面的链接。