Svn组织问题

时间:2009-05-13 21:05:44

标签: svn organization

我不确定如何组织这些项目,因为它们彼此依赖。

现在它的所有内容都在以下结构中,这很难管理

-trunk
 |-bin - compiled common dlls
 |-lib - static libs for use with common dlls
 |-src - common dll source code
 |-include - headers for common dlls
 |-common.sln - VS 2008 solutions for common dlls
 |-samples
 ||-res - resources for samples
 |||-img
 |||-snd
 ||-c++ - c++ samples for common dlls, tends to double up as tests
 |||-various VS 2008 sample solutions
 ||-py - python versions for some samples
 |||-...
 |-wrappers
  |-python
  ||-bin - compiled python extension dll
  ||-src - source for python wrapper
  -Apps - actaul programs using common dlls, each with its own dir and solution
  |-...

这有很多问题: -1 svn结构只是有点混乱,我没有真正的方法来为一个应用程序创建一个bracnh例如 - 由于应用程序使用的文件路径,任何事情的发布都是一个巨大的痛苦。例如,python程序需要知道python扩展dll的位置,以及每个常见dll的位置。这些路径在svn上与它们发布的版本非常不同(它们都在一个共同的目录中)

2 个答案:

答案 0 :(得分:3)

Eurrghh!

将所有内容划分为单独的项目/ dll / libraries / artefacts - 无论您想要调用它们还是遵循建议的SVN结构:

/ (root)
  /Application1
    /branch
    /tag
    /trunk
  /Application2
    /branch
    /tag
    /trunk
  /LibraryX
    /branch
    /tag
    /trunk
  /LibraryY
    /branch
    /tag
    /trunk

然后,如果应用程序希望其中一个库或依赖项位于其结构中的目录中,请使用svn:external属性将其拉入。

例如,如果您希望LibraryX中编译的dll位于Application1中名为dll的文件夹中,那么您需要在/ Application1 /中的存储库中添加以下svn:external属性:

svn://repositoryname/LibraryX/buildoutput/ dll

当您签出Application1时,您将获得其所有文件以及它将在您的工作副本中添加一个名为dll的文件夹,该文件夹将从LibraryX / buildoutput /

中签出

您还可以将每个项目签出到自己的文件夹中并挑选某些文件。但这需要稍微不同的方法 - 您将在本地计算机上使用相同的父文件夹检出所有文件夹,如下所示:

Application1 (checked out from svn://repositoryname/Application1/trunk)
LibraryX (checked out from svn://repositoryname/LibraryX/tag/stable)

那么如果您想要LibraryX的构建输出中的特定文件,您可以添加:

svn:externals ../LibraryX/build/thelibfile.dll libfile.dll

..作为Application1的签出工作副本的属性,它将从LibraryX中提取libfile.dll并将其粘贴到Application1工作目录的根目录中。

请注意,这样做的一个主要好处是,通过使用标记,您可以让应用程序引入其依赖项的特定标记版本。在上面的示例中,开发人员可以使用Application1的主干,但使用稳定版本的库。当通过重新标记创建库的下一个稳定版本时,只需更新并在开发工作副本中将它们发送到所有开发人员的机器上。

外部仅在单个文件签出并从本地工作副本中引用时才起作用,您不能像使用文件夹那样直接从存储库中执行..

您只能使用subversion版本1.6.x引入单文件外部

答案 1 :(得分:1)

一般情况下,如果你在subversion存储库中有多个项目并且它变得混乱,你想要做两件事之一:
1)您将它们合并为一个整体项目,因为每个人都在处理相同的事情,因此标签和分支适用于所有内容。这往往是在同一个团队处理所有代码的情况下完成的,而项目实际上只是编译不同的组件。

2)将不同的项目分开,将它们放在自己的存储库中(或者至少将它们分别放在顶部,在项目目录下面有自己的trunk / branch / tag部分)并完全单独构建它们并将它们发布到存储库,在本例中是共享文件系统或Web服务器。

在您的具体情况下,您看起来好像有两个项目,一组通用的库代码和一些此代码的用户。因此,您最终会得到一个顶级结构:

  1. 应用
  2. 通用
  3. 样品(可能?!)
  4. 包装器
  5. 每个项目目录下都有自己的主干,标签和分支结构。他们每个人都有一个编译二进制文件的副本,它代表了依赖项目的输出(或者指的是存储库中的版本),因此你有一种正式的方式来推进依赖项。