在Subversion for Visual Studio项目中构建存储库的最佳方法?

时间:2008-08-19 03:03:31

标签: svn

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

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

6 个答案:

答案 0 :(得分:9)

Subversion存储库通常细分为:

branch/
tags/
trunk/

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

branch/
tags/
trunk/
    project1/
    project2/

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

project1/
    branch/
    tags/
    trunk/

project2/
    branch/
    tags/
    trunk/

请注意,这种做法只是惯例,SVN中没有任何内容需要(或真正促进)这样做。但是,每个人都习惯了。所以,你可以帮助别人。

进一步说明,主干是您的主要开发地点。如果要标记特定修订版本(例如发布版本),则只需 svn 项目复制到tags目录中。此外,只需将代码复制到分支目录中,如果您想要做一些戏剧性的或延长的事情,并且不想阻碍主干的进展。稍后您可以 svn 合并 分支,并在准备采取行动时重新加入主干

如果您想纠正当前Subverion存储库中的意外事件,请使用 svn 移动重新定位它们。与CVS的删除和添加流程不同,move会保留新位置的版本历史记录。

答案 1 :(得分:4)

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

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

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

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

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

答案 2 :(得分:0)

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

<强>解决方案
项目1

  
      
  • 分行
  •   
  • 标签
  •   
  • Trunk
  •   

项目2

  
      
  • 分行
  •   
  • 标签
  •   
  • Trunk
  •   

这样您就可以独立管理每个项目的发布。

否则最常见的结构是:

  
      
  • 分行
  •   
  • 标签
  •   
  • Trunk
  •   
  • 文档(可选)
  •   

答案 3 :(得分:0)

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

JP Boodhoo关于自动构建,VS文件夹结构以及让开发人员快速启动和运行的主题a great series

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

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