gpt4 book ai didi

SVN:跨项目共享公共(public)库/代码

转载 作者:行者123 更新时间:2023-12-03 00:11:59 26 4
gpt4 key购买 nike

我正在重新构建我们现有的代码库。我们正在转向 SVN,并预计软件事件会增加,而我需要一个可扩展且强大的结构。

我希望我们的要求与其他公司的要求没有太大不同,所以我会从你们那里得到一些反馈。

问题

我有很多项目:库和应用程序。应用程序依赖于库,并且某些库相互依赖。

我们有多种产品。每个产品都是一个 MSI,其中包含一些库和一些应用程序。

这些项目是 C++ 的,它们之间的依赖关系是头文件和导入库/DLL - 我们目前正在 Windows 下开发,但最终将移植到 MACOS 和 Linux。

虽然每个项目对于其中一些项目来说都是独立的实体,但我们最终还是会同时更新其中的几个项目。例如,在开发 app_0 时,我们可能会更改 lib_a 中的一些代码(可能是错误修复、添加功能等)。但我们不想强制开发人员必须始终检查项目依赖项的源代码。

潜在的解决方案

每个项目都位于 SVN 中自己的目录中,并有一个“dependency.txt”文件,其中列出了它所需的 header 、.libs 和 .dll,以及应在磁盘上创建这些文件的位置。 checkout 项目后,脚本会自动解析该文件以检索依赖项。头文件从 SVN 检索(部分 checkout ),而二进制文件则从服务器获取。

项目遵循通常的主干/标签/分支结构。

在磁盘上,每个项目都位于其自己的目录中,采用扁平结构。输出目录包含二进制文件,这些二进制文件可以通过构建项目生成,也可以作为处理“dependency.txt”文件的结果从服务器复制。

  • 输出
    • win32_调试
      • lib_a.lib
      • lib_a.dll
  • lib_a
    • 来源
    • 公开
      • lib_a.h
      • 其他.h
  • 项目_1
    • 依赖项.txt
    • 构建
    • 来源
      • project_1.cpp

此结构意味着我们可以处理project_1,而无需检查lib_a 的源代码。但我们仍然可以将库 checkin “./lib_a”并使用其源代码,而无需对project_1进行任何修改,因为 header 和导入库的位置保持不变。

“安装程序”项目用于发布软件。该项目将检查发布所需的所有项目并构建它们。

在发布期间,将为所有项目创建“发布”分支。所有应该进入版本的更改都将提交给它。这样我们只需要在结帐(跟踪发布分支)上运行更新即可获取最新的更改。

最佳答案

有几种处理依赖性问题的方法:

  • 使用发布存储库并将您的头文件视为已发布的软件。您可以使用 wget 提取正确版本的库和头文件。优点是您无需将大块二进制代码 checkin Subversion 存储库。 Subversion 确实可以处理二进制文件,但它们会占用您存储库中的大量空间。

  • 您可以使用svn:externals 属性。这允许您自动在另一个目录中包含另一个存储库目录。但是,要非常非常小心!

假设您有以下内容:

trunk/project_A
trunk/project_B
trunk/subproject

您希望在 project_A 中包含 trunk/subproject,并在 project_A 上设置以下属性:

$ svn propset svn:externals "/trunk/subproject subproject" .

当您分支project_A时,您的子项目仍将位于主干上。不是你想要的。如果您标记 project_A,该标记将不是快照,因为 subproject 仍然指向主干。有几种方法可以解决这个问题:

  • 使用相对目录。即,svn propset "svn:externals ../subproject"subproject .。这将确保当您分支 project_A 时,它将查看子项目的分支而不是主干。当您标记 project_A 时。该标签将指向子项目的相同标签。问题是您必须使用project_A 分支并标记您的子项目。

  • 使用特定版本。您可以使用-r参数将子项目的特定版本固定到project_A,也可以简单地使用标签。无论哪种方式,您都及时卡住了子项目。警告:如果有人 checkout project_A,他们可以修改子项目,即使它位于标记目录上。您将需要某种预提交 Hook 来防止某人更改标签。

关于SVN:跨项目共享公共(public)库/代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16416836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com