0

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

现在它全部在以下结构中,这变得难以管理

-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 上与发布时的路径非常不同(它们都可能在一个公共目录中)

4

2 回答 2

3

哎呀!

将所有内容划分为单独的项目/dll/库/人工制品 - 无论您想如何称呼它们,并遵循推荐的 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 引入单个文件外部

于 2009-05-13T21:22:08.260 回答
1

一般来说,如果你在一个 subversion 存储库中有多个项目并且它变得混乱,你想做两件事之一:
1)你将它全部合并到一个单一的项目中,因为每个人都在做同样的事情,因此标签和分支适用于所有事情. 这往往是在同一个团队处理所有代码并且项目实际上只是以不同方式编译的组件的情况下完成的。

2)您将不同的项目分开,将它们放在自己的存储库中(或至少将它们拆分在顶部,并在该项目目录下使用自己的主干/分支/标签部分)并完全单独构建它们并将它们发布到存储库,在这种情况下是共享文件系统或 Web 服务器。

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

  1. 应用
  2. 常见的
  3. 样品(也许?!)
  4. 包装纸

每个项目目录下都有自己的主干、标签、分支结构。它们中的每一个都有一个已编译二进制文件的副本,它代表依赖项目的输出(或引用存储库中的版本),因此您有一种正式的方式来推进依赖关系。

于 2009-05-13T21:20:51.677 回答