12

我有一些 C#.dll项目,这些项目对许多应用程序都很常见。目前,我有一个大存储库。我将每个 DLL 存储为存储库中的一个单独项目,并将每个应用程序项目存储为同一存储库中的一个项目。

我最近切换到 Subversion 进行源代码控制,我担心我在构建存储库方面做得不好。我想听听其他人在做什么。

4

6 回答 6

9

Subversion 存储库典型地细分为:

branch/
tags/
trunk/

您可以将所有 DLL 和应用程序项目放入主干,然后根据需要为所有这些项目使用分支标签:

branch/
tags/
trunk/
    project1/
    project2/

或者,您可以在根目录中为每个项目创建文件夹,然后在其中放置公共分支、标签和主干文件夹。

project1/
    branch/
    tags/
    trunk/

project2/
    branch/
    tags/
    trunk/

请注意,这种做法只是约定俗成的做法,SVN 中没有任何东西要求(或真正促进)以这种方式进行。不过,大家都习惯了。所以,你会帮别人一个忙。

进一步详细说明,主干是您进行主要开发的地方。当你想标记一个特定的修订版(例如一个发布版本)时,只需svn将项目 复制到 tags 目录中。另外,当您想做一些戏剧性或长时间的事情并且不想阻碍主干的进展时,只需将代码复制到分支目录中即可。稍后您可以在准备好操作时您的分支合并主干!

如果您想纠正当前 Subverion 存储库中的错误,只需使用svn move重新定位它们。与CVS的删除和添加过程不同,move 将保留新位置的版本历史记录。

于 2008-08-19T03:12:54.043 回答
4

使用分支/主干/标签存储库结构是非常标准的,但是如果我正确理解您,您的问题是您有一组通用的 dll 项目,这些项目可以在多个项目中使用。这肯定会变得难以管理。

所以这里的典型场景是你有一个名为 Common.Helpers 的类库,它的代码对你的所有应用程序都是通用的。

假设我正在启动一个名为 StackOverflow.Web 的新应用程序,它需要引用 Common.Helpers。

通常你要做的是创建一个新的解决方案文件并添加一个名为 Stackoverflow.Web 的新项目并添加现有的 Common.Helpers 项目,然后从新的 Stackoverflow.Web 项目中引用它。

我通常尝试做的是为 Common.Helpers 项目创建一个存储库,然后在 subversion 中将其作为外部. 这样,您可以将代码保存在单个位置的源代码控制下,但仍可在多个项目中单独使用它。

于 2008-08-19T03:33:39.977 回答
0

如果您的子项目可以以不同的版本发布(如控件、Web 部件等),那么像这样构建您的结构可能是有意义的:

解决方案

  • 分支
  • 标签
  • 树干

项目 2

  • 分支
  • 标签
  • 树干

这样您就可以独立管理每个项目版本。

否则最常见的结构是:

  • 分支
  • 标签
  • 树干
  • 文档(可选)
于 2008-08-19T03:22:18.937 回答
0

我将所有内容都存储在存储库中,以便开发人员(或重建的 devbox)轻松地从 SVN 签出,然后运行构建(所有必要的程序集都位于相对路径中)。如果您有多个应该分开的项目,这也将鼓励您共享组件的团队交付高质量的组件。这可能遵循正常发布到生产的心态,其中共享的组装将在您的下游项目中更新。这是一个非常自然的软件价值链,代价是一点点磁盘空间。

JP Boodhoo 有一个关于自动构建、VS 文件夹结构以及让开发人员快速启动和运行主题的精彩系列。

于 2008-08-19T04:16:12.247 回答
0

感谢所有回答的人。lomaxx,我花了一个上午研究使用外部功能,看起来这是要走的路。我没有意识到这一点,可能是因为它在 Tortoise 中并不十分突出。

于 2008-08-19T12:53:28.160 回答
0

如果你想同时在多个项目上使用 Subversion 1.5 的合并跟踪,你应该使用没有外部的单个树。

跟踪合并(就像提交一样)总是在目录及其子目录之上。

相同的规则适用于原子提交。(仅在单个工作副本中稳定工作。它可能在某些特定的其他情况下工作,但不能保证这种行为)

于 2008-08-21T09:59:45.973 回答