我有一些 C#.dll
项目,这些项目对许多应用程序都很常见。目前,我有一个大存储库。我将每个 DLL 存储为存储库中的一个单独项目,并将每个应用程序项目存储为同一存储库中的一个项目。
我最近切换到 Subversion 进行源代码控制,我担心我在构建存储库方面做得不好。我想听听其他人在做什么。
我有一些 C#.dll
项目,这些项目对许多应用程序都很常见。目前,我有一个大存储库。我将每个 DLL 存储为存储库中的一个单独项目,并将每个应用程序项目存储为同一存储库中的一个项目。
我最近切换到 Subversion 进行源代码控制,我担心我在构建存储库方面做得不好。我想听听其他人在做什么。
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 将保留新位置的版本历史记录。
使用分支/主干/标签存储库结构是非常标准的,但是如果我正确理解您,您的问题是您有一组通用的 dll 项目,这些项目可以在多个项目中使用。这肯定会变得难以管理。
所以这里的典型场景是你有一个名为 Common.Helpers 的类库,它的代码对你的所有应用程序都是通用的。
假设我正在启动一个名为 StackOverflow.Web 的新应用程序,它需要引用 Common.Helpers。
通常你要做的是创建一个新的解决方案文件并添加一个名为 Stackoverflow.Web 的新项目并添加现有的 Common.Helpers 项目,然后从新的 Stackoverflow.Web 项目中引用它。
我通常尝试做的是为 Common.Helpers 项目创建一个存储库,然后在 subversion 中将其作为外部. 这样,您可以将代码保存在单个位置的源代码控制下,但仍可在多个项目中单独使用它。
如果您的子项目可以以不同的版本发布(如控件、Web 部件等),那么像这样构建您的结构可能是有意义的:
解决方案
一
- 分支
- 标签
- 树干
项目 2
- 分支
- 标签
- 树干
这样您就可以独立管理每个项目版本。
否则最常见的结构是:
- 分支
- 标签
- 树干
- 文档(可选)
感谢所有回答的人。lomaxx,我花了一个上午研究使用外部功能,看起来这是要走的路。我没有意识到这一点,可能是因为它在 Tortoise 中并不十分突出。
如果你想同时在多个项目上使用 Subversion 1.5 的合并跟踪,你应该使用没有外部的单个树。
跟踪合并(就像提交一样)总是在目录及其子目录之上。
相同的规则适用于原子提交。(仅在单个工作副本中稳定工作。它可能在某些特定的其他情况下工作,但不能保证这种行为)