我开始使用SVN。我知道基本命令并理解基本原理。我想知道是否有人在团队环境中使用Subversion有任何提示或最佳实践。
我可以看到在提交代码时添加合理冗长的消息的好处,但还有其他我应该记住的事情吗?
感谢所有出色的答案 - 他们帮了很多忙。
答案 0 :(得分:75)
鼓励频繁提交。对版本控制不熟悉的队友可能会觉得他们需要将代码保留在存储库中,直到“它正常工作”。教导每个人尽早提交,并经常尽快找到问题。而不是保持代码“直到它工作,建议你的队友创建可能破坏主干的功能分支。这导致......
建立分支和标记实践。除了功能分支外,还鼓励您的队友使用分支来修复大错误。在工作的开始和结束时标记主要错误修复。为生产/ qa版本维护标签(以及可能的分支)。
为trunk建立策略并坚持下去。一个例子可能是,“trunk必须始终构建没有错误。”或“主干必须始终通过所有单元测试”。任何不能满足行李箱标准的工作必须在分支机构完成。
答案 1 :(得分:63)
不要在代码更改时提交格式更改
如果你想重组一个巨大的文件的空格( Control + K + D ),那很好。提交格式更改与实际逻辑更改分开。如果要在文件中移动函数,也是如此。将移动与实际编辑分开。
答案 2 :(得分:41)
我一直坚持的一个关键概念是一起提交相关的代码更改。推论是不会在同一次提交中提交不相关的代码更改。这意味着不要在一次提交中修复2个错误(除非它是相同的修复),并且不会在2次提交中提交一半错误修复。此外,如果我需要在系统的一个不相关的部分添加一些新的增强或某些东西,然后我需要进行其他工作,我会单独提交增强功能(首先)。这个想法是任何人可能想要拥有的任何改变(或自行回滚)应该是一个单独的提交。在进行合并或回滚损坏的功能时,它将为您节省大量的麻烦。
答案 3 :(得分:15)
已经提到了很多,这里还有一些:
如果您有源控制中不需要的文件(例如配置,编译文件等),请将它们添加到忽略列表。通过这种方式,您可以注意到任何您忘记添加的文件,总是期望显示为SVN未知的文件的空列表。
添加一个帖子提交事件,该事件将向您的开发人员邮件列表发送电子邮件(或针对此目标的特定信息)与提交的更改相关,理想情况下是针对该修补程序的修补程序。< / p>
与您的错误跟踪器集成,以便通过指向错误链接的错误/功能请求显示对提交的引用。像MantisBT这样的错误跟踪器支持此功能。
考虑与持续集成(例如CruiseControl.NET),NAnt进行构建,以及NUnit / VS进行单元测试。这样,一旦用户签入代码或在计划的时间间隔内编译代码,就会运行单元测试,并且开发人员会获得该流程的反馈。如果存储库被破坏(即不构建),这也会警告团队的其他成员。
答案 4 :(得分:14)
嗯,基础知识:
答案 5 :(得分:12)
人们给出的答案很棒。其中大部分内容在best practices for SVN的svn用户文档中进行了总结 重复:
答案 6 :(得分:9)
我想总结一下我坚持的最佳实践:
应该有存储库结构。我个人使用以下存储库结构:
/trunk
/tags
/builds
/PA
/A
/B
/releases
/AR
/BR
/RC
/ST
/branches
/experimental
/maintenance
/versions
/platforms
/releases
PA
(pre-alpha),A
(alpha),B
(beta),AR
(alpha-release),BR
(beta-release),RC
(候选发布版),ST
(稳定)。您可以以diagram的形式找到我的颠覆最佳实践概述,说明我使用的软件配置管理方法的主要原则。
答案 7 :(得分:7)
我发现非常有用的一件事是svn:external属性,这意味着您可以将其他存储库中的目录引用到您自己的库中。它提供了组织代码和数据的非常好的方法。一些例子是:
答案 8 :(得分:5)
与您的错误跟踪软件集成使用。如果您使用Bugzilla,则可以对其进行设置,如果您的评论以“Bug XXXX”开头,您的SVN评论会自动添加为对给定错误的评论,包括指向该版本的SVN Web界面的链接。
答案 9 :(得分:4)
了解SVN的分支和合并工具和约定。
与其他团队成员合作的最佳方式是将工作分解为完整的开发功能/修复,然后在分支中处理各个更改。然后在完成/准备/批准合并后将更改合并回主线分支/主干。
这样,个人可以朝着共同的目标努力(在同一个分支或单独的分支上),而不会与其他变化发生冲突。
您的里程可能会有所不同,这对于只有两个人来说可能有点过分。
答案 10 :(得分:3)
如果您使用与SVN良好集成的好工具,它会更容易。通过这些功能,您可以轻松查看已更改的内容,然后提交全部或部分更改,并经常将工作副本更新为SVN中的最新版本。
我建议Tortoise SVN(如果您使用的是Windows)和Visual SVN(如果您使用的是VS)。
另请参阅是否可以对其进行设置,以便在提交更改时随时收到电子邮件或类似通知(通常还包括提交消息和已更改文件列表)。 CVSDude等服务提供此功能。我发现在更新我的工作副本之前知道已经进行了更新然后知道该更新中包含的内容是有帮助的。
答案 11 :(得分:3)
源代码管理的黄金法则:提前入住,经常登记
有关如何组织存储库的提示:
答案 12 :(得分:3)
除了分支政策等。 (其中一个尺寸绝对不适合所有),你应该有很好的提交:
答案 13 :(得分:2)
在修复任何合并冲突之前,请咨询您的团队,了解他们的更改,或者至少仔细查看差异。让他们自己检查合并的代码,以确保他们的添加不会在合并中丢失。
答案 14 :(得分:2)
与bug跟踪器和提交策略实施集成的一个示例可能是Trac svn pre / post-commit钩子脚本,如果提交消息不引用bug中的任何票证,它可以拒绝提交-tracker并根据消息内容向现有故障单添加注释(即提交消息可能包含类似“修复#1,#2和#8”的内容,其中#1,#2,#8是故障单号)。
答案 15 :(得分:2)
我看到的减少损坏提交的一件事就是拥有良好的预提交脚本。例如,您可以在提交更改之前运行任何单元测试。这会导致提交有点慢,但是你可以通过避免踩到某个人的脚趾而不得不道歉来节省时间。当然,当你拥有一个庞大的开发团队和非常频繁的提交时,这将变得更加难以管理。
答案 16 :(得分:1)
SVN本身就是一个良好的开端,其他一些海报也就最佳实践提出了一些很好的建议。
我唯一要补充的是,您应该使用CruiseControl或TeamCity连接SVN以推动持续集成流程。这将发送构建电子邮件,让每个人都知道有人打破了构建。
很早就会告诉你谁在追踪你的过程,谁不是。可能导致一些摩擦,但从长远来看,你的团队会更好。
答案 17 :(得分:1)
答案 18 :(得分:1)
使用SVN的最佳做法:
当您第一次上任并打开Eclipse项目时,必须要做的第一步是更新您的项目。
更新后,开始工作。完成编码后,请正确检查,您的应用程序是否正常运行,没有任何异常。一旦你确定你的代码工作正常,就可以提交代码了。
注意:提交代码时,请勿直接提交。与服务器建立同步并检查所有需要提交的内容。 注意:不要提交整个文件夹一次。因为您可能已根据需要对文件进行了一些更改,或者您可能已删除了本地系统中的某些文件。但是服务器上的设置不同。因此,请单独检查文件并提交代码。
不要直接提交/更新冲突文件。
何时进行覆盖和更新?
当你非常确定你不需要任何本地人时 更改并希望完全更新服务器副本。记下来 一旦你进行覆盖和更新,你就不会得到任何你的 当地的变化。
注意:请勿在未更新的情况下保留项目超过一天。也不要在没有提交许多天的情况下保留代码。
沟通谁在同一个组件中工作,并讨论他们每天所做的改变。
除非有某些原因,否则不要提交属性和配置文件。因为服务器和云端的设置会有所不同。
不要将目标文件夹提交到SVN,只需要在SVN存储库中维护源代码和资源文件夹。
当您丢失代码时,请不要惊慌!您可以从SVN历史记录中获取早期副本。
不要将项目签出到磁盘的多个位置。在一个位置查看并使用它。
答案 19 :(得分:0)
将其用于评论模板:
[task / story xxx] [minor / major] [comment] [follow up comment] [bug to bug]
答案 20 :(得分:0)
请记住,您提交的增量,模块化,离散和简洁越多,您(或可能是其他人)就越容易: