您将如何为内部软件项目组织Subversion存储库?

时间:2008-09-09 04:19:25

标签: svn version-control

我为一家主要业务与软件无关的公司工作。大多数使用源代码控制的文档都是由开发团队编写的,用于编写商业或开源项目。作为编写内部软件的人,我可以说工作的完成方式与商业或开源设置不同。此外,存储过程和数据库脚本需要与代码保持同步。

特别是我希望得到关于如何最好地使用内部软件构建存储库的建议。大多数文档都建议使用主干,分支,标签等。以及保持生产,测试和开发环境与存储库中各自部分保持同步的过程。

9 个答案:

答案 0 :(得分:19)

只有在组织SVN存储库时,设置SVN存储库才会非常棘手。在我们设置SVN之前,我实际上是RTFM在线Subversion manual,它讨论了存储库的组织技术以及您应该提前考虑的一些问题,即如果您决定创建存储库后无法执行的操作改变你的想法。我建议在安装之前通过本手册。

对于我们,作为顾问,我们通过SVN进行定制和内部软件开发以及一些文档管理。为每个客户创建一个存储库,为自己创建一个存储库符合我们的利益。在每个存储库中,我们为每个项目(软件或其他)创建了文件夹。这使我们能够按存储库和客户端甚至存储库中的项目对安全访问进行分段。更进一步,我们为每个软件项目创建了“工作”,“标签”和“分支”文件夹。我们通常使用'release_w.x.y.z'作为标准的标记将版本放在'标签'中。

在你的情况下,为了保持sprocs,脚本和其他相关文档的同步,你可以创建一个项目文件夹,然后在那个“工作”文件夹下,然后在那个'代码'下面,然后在'脚本'旁边,然后,当您标记要发布的工作版本时,最终会将它们全部标记在一起。

\Repository
   \ProjectX
      \Working
         \Code       
         \Scripts
         \Notes       
      \Tags
      \Branches

对于非代码,我建议按项目或文档类型(手册,政策等)进行直接文件夹布局。通常使用文档并根据公司的运作方式,只需拥有版本历史记录/日志即可。

我们在Windows上运行SVN以及WebSVN这是一个很棒的开源存储库查看器。我们使用它来为客户提供对其代码的Web访问,并且它都是由底层的Subversion安全性驱动的。在内部,我们使用TortoiseSVN来管理存储库,提交,更新,导入等。

另一件事是培训应被视为部署的一个组成部分。不熟悉版本控制的用户可能很难理解正在发生的事情。我们发现给他们提供功能性指令(在创建项目时执行此操作,在更新时执行此操作等)在学习概念时非常有用。我们创建了一个“沙盒”存储库,用户可以在其中播放他们想要的文档和文件夹以进行练习,您可能会发现这对于确定要建立的策略有用。

祝你好运!

答案 1 :(得分:6)

对于subversion,还有Assembla Trac和其他有用的工具。如果您需要更多空间或每个项目的用户,它是免费的,或者您可以为帐户付款。

答案 2 :(得分:3)

您可以使用www.unfuddle.com等服务设置免费的SVN或GIT存储库。

我们使用Unfuddle,它真的很棒。有免费和付费版本(根据您的需要)。

或者,您当然可以设置本地副本。有很多教程可以通过谷歌找到:http://www.google.com/search?rlz=1C1GGLS_enUS291&aq=f&sourceid=chrome&ie=UTF-8&q=set+up+svn

答案 3 :(得分:3)

您的项目的一个存储库可能就足够了。我喜欢按项目索引布局的典型方法(参见this section中的O'Reilly Subversion book):

/first-project/trunk
/first-project/branches
/first-project/tags
/another-project/trunk
/another-project/branches
/another-project/tags
/common-stuff/trunk
/common-stuff/branches
/common-stuff/tags

请记住,您以后可以随时重新整理存储库。

此外,对于内部工作,我更喜欢FSFS用于数据存储,而不是Berkeley DB。 FSFS更具弹性,结账速度对小型团队/项目来说并不是很重要。你可以compare自己决定。

配方的其他标准部分包括Trac和用于在LAN上托管存储库的最小Linux服务器。

答案 4 :(得分:3)

在发布这个问题之后,我和一位建议我读了这篇文章的同事交谈过:

http://www.codinghorror.com/blog/archives/000968.html

简而言之,它主张程序员更加意识到分支。它帮助我看到没有正确的方法来组织我们的存储库。对于我们的团队,我们将有一个主干和两个长期分支进行测试和开发。此外,我们将为每个任务制作单独的分支,并在我们将任务推广到测试和生产时合并来自任务分支的更改。

答案 5 :(得分:2)

对于我的公司,我使用svn + ssh和基于密钥的身份验证。您可以使用Windows客户端和Linux客户端执行此操作。当您使用ssh密钥登录而不是输入密码时,如果您直接拿到密钥,这真的很容易使用。

Here's an article on setting up svn+ssh附有安全说明。如果您了解所有这些内容并按照这些步骤操作,那么您将有一个良好的开端。

This article介绍了进一步保护svn帐户的ssh登录的多种方法。

我建议专门为svn访问创建帐户,而不能访问该服务器。我的猜测是你会使用每日构建或自动脚本来更新db中的存储过程。每日构建可以拥有自己的特殊帐户和自己的ssh密钥。我不喜欢我的自动化工具使用与人类用户相同的登录名运行(因此我知道哪个工具已损坏)。

如果你不了解所有的安全技巧,搜索谷歌可以得到一些帮助。如果您遇到问题,请先安装一个没有安全技巧。这使得排除故障变得更加简单。

祝你好运,享受源代码控制的好处!

答案 6 :(得分:2)

我同意使用trunk / branches / tags的通用约定。除此之外,我认为你可能会在How do you organize your version control repository?寻找类似我答案的内容。

答案 7 :(得分:0)

this thread中所述,分布式VCS(git,Mercurial)是比集中式更好的模型,因为分支创建容易,分支合并容易,无需设置特殊服务器,无需网络获得工作和其他一些优势。如果您单独工作,DVCS允许您在需要时很容易地将人员纳入您的项目。

无论如何,直接回答你的问题,设置SVN的方法是每个项目都有一个存储库,并且根据是否共享存储过程和脚本和库,在每个项目树上为脚本创建一个目录。存储过程,或共享代码的完整存储库。

答案 8 :(得分:0)

我相信跟随基本模式,项目目录下面有树干,标签,分支。我通常喜欢像这样设置顶级

Projects包含所有单个项目或模块 Releases包含涉及多个模块的发布标签 用户拥有私人用户分支 Admin拥有我的钩子脚本,备份脚本等。

如果您的产品由多个模块组成,这些模块可能是特定版本的不同标签(一个环用于绑定它们以及所有这些标签),则发布标签非常有用。它使源托管和开发更容易引用构成版本1或2的内容。