Svn 在Subversion中为VisualStudio项目构建存储库的最佳方法?

Svn 在Subversion中为VisualStudio项目构建存储库的最佳方法?,svn,Svn,我有一些C#.dll项目,这些项目对许多应用程序都很常见。目前,我有一个大型存储库。我将每个DLL作为单独的项目存储在存储库中,并将每个应用程序项目作为项目存储在同一存储库中 我最近切换到Subversion进行源代码控制,我担心我在构建存储库方面做得不好。我想听听其他人在做什么。Subversion存储库通常分为: branch/ tags/ trunk/ 您可以将所有DLL和应用程序项目放置到主干中,然后根据需要对所有项目使用分支和标记: branch/ tags/ trunk/

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


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

Subversion存储库通常分为:

branch/
tags/
trunk/
您可以将所有DLL和应用程序项目放置到主干中,然后根据需要对所有项目使用分支标记

branch/
tags/
trunk/
    project1/
    project2/
或者,您可以在根目录中为每个项目创建文件夹,然后在其中放置公共分支、标记和主干文件夹

project1/
    branch/
    tags/
    trunk/

project2/
    branch/
    tags/
    trunk/
请注意,这种做法只是一种惯例,SVN中没有任何内容要求(或真正促进)以这种方式进行。然而,每个人都习惯了。所以,你是在帮别人一个忙

为了进一步说明,主干是您主要开发的地方。当您想要标记某个特定修订版(例如发布版本)时,只需将项目复制到标签目录中即可。另外,如果您想做一些引人注目的或延长的事情,并且不想阻碍主干的进程,只需将代码复制到分支目录中即可。稍后,您可以svn合并您的分支回到主干,当它准备好执行操作时


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

如果您的子项目可以以不同的版本发布(如控件、web部件等),则按以下方式构建您的结构可能有意义:

解决方案
项目1

  • 分支机构
  • 标签
  • 树干
项目2

  • 分支机构
  • 标签
  • 树干
通过这种方式,您可以独立管理每个项目版本

否则,最常见的结构是:

  • 分支机构
  • 标签
  • 树干
  • 文档(可选)

使用branch/trunk/tag存储库结构是相当标准的,但是如果我正确地理解了您,那么您的问题是您有一组通用的dll项目,可以跨多个项目使用。这肯定会变得难以管理

因此,这里的典型场景是,您有一些名为Common.Helpers的类库,这些类库包含所有应用程序都通用的代码

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

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


我通常尝试并做的是为Common.Helpers项目创建一个存储库,然后在subversion中将其作为一个文件引用。通过这种方式,您可以在单个位置对代码进行源代码管理,但仍然在多个项目中单独使用它。

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


JP Boodhoo讨论了自动构建、VS文件夹结构以及让开发人员快速启动和运行的主题。

感谢所有回答这个问题的人。lomaxx,我花了一上午的时间研究外部功能的使用,看起来这是一个方向。我没有意识到这一点,可能是因为它在《乌龟》中并不突出。

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

跟踪合并(就像提交)总是覆盖目录及其子目录


同样的规则也适用于原子提交。(仅在单个workingcopy中稳定工作。它可能在某些特定的其他情况下工作,但该行为无法保证)

在看到您有时间解决此问题后,此更改对您的问题解决方案有何影响?这对你有用吗?我是这样做的。我还担心如何创建存储库,但它似乎对我们有用。这个问题的标题应该改为第一句。在你开始阅读较长的描述之前,你无法说出问题是什么。