我不确定如何组织这些项目,因为它们彼此依赖。
现在它的所有内容都在以下结构中,这很难管理
-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上与它们发布的版本非常不同(它们都在一个共同的目录中)
答案 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服务器。
在您的具体情况下,您看起来好像有两个项目,一组通用的库代码和一些此代码的用户。因此,您最终会得到一个顶级结构:
每个项目目录下都有自己的主干,标签和分支结构。他们每个人都有一个编译二进制文件的副本,它代表了依赖项目的输出(或者指的是存储库中的版本),因此你有一种正式的方式来推进依赖项。