【问题标题】:Best Practices for Source Control Dependencies源代码控制依赖项的最佳实践
【发布时间】:2010-03-07 21:53:51
【问题描述】:

您如何处理依赖于单独框架或库的未编译项目的源代码控制设置?例如,项目 A 使用框架 B。项目 A 是否也应该在其存储库中包含来自框架 B 的代码?有没有办法从不同的存储库中自动包含它,或者我必须手动更新它?对于这种情况,通常采取哪些一般方法?假设我控制了项目 A 和框架 B 的存储库,并且两者的源代码都没有被编译。

任何资源或建议将不胜感激。我目前正在使用 Subversion(在非常基础的级别上),但我想切换到 Mercurial 以便可以使用 Fogbugz 试用 Kiln。

编辑:在 Mercurial 中,您会为此功能使用父存储库吗?

【问题讨论】:

标签: svn version-control mercurial dependencies


【解决方案1】:

如果您想使用 subversion 并需要包含来自不同存储库的代码,Subversion Externals 可能是一个选项。

但是,如果您正在处理可编译的代码,最好设置一个仅获取所需二进制文件的构建过程。像 Maven 这样的构建工具可以帮助你。

【讨论】:

  • 或 Ivy (ant.apache.org/ivy) Apache 依赖管理器。但是 Maven 和 Ivy 可能都只适用于 Java 项目。我不知道是否有人曾在 C/C++ 上下文中使用过它们.. (?)
  • 我们专门为此使用外部设备。代码取决于模块的版本 X。当代码被签出时,外部将该修订拉入树中。使依赖关系明确而明显。
【解决方案2】:

大多数时候,我会尝试在 subversion 中包含构建项目所需的所有内容。这是使用 C# 和 Visual Studio,所以我的大部分依赖项都是 dll。在其他环境中,约定可能会有所不同。

这通常是我布置新项目的方式:

  • 参考
    • SomeOpenSourceProject.dll
    • SomePurchasedComponent.dll
  • 我的项目A
    • MyProjectA.csproj (参考 ..\ref\SomeOpenSourceProject.dll)
  • 我的项目B
  • MyWeb (参考 ..\ref\SomePurchasedComponent.dll)
  • MyApplication.sln

通过这种方式,新开发人员可以毫不费力地检查和构建它。过去他们曾经为 dll 使用网络共享,但这很烦人,因为不同的项目使用不同的版本,如果你想返回 subversion 或分支或任何东西,很难跟踪。这种结构很好地解决了这些问题。

【讨论】:

    【解决方案3】:

    我做的事情与大卫·霍格非常相似,只是看起来像这样:

    - lib (anything used IN the software)
        - purchased_component.dll
        - internal_library.dll
        - icon_set
            - icon1.ico...
    - tools (anything used to BUILD the software)
        - nunit.framework.dll
        - settings.stylecop
        - settings.fxcop
    - src (the software itself)
        - myapp.sln
    

    这个设置的大部分灵感来自tree surgeon(不过现在已经过时了)

    【讨论】:

    • 我也使用过这种方法。我喜欢将依赖项拆分为随版本发布的那些东西(lib)与开发人员需要构建/文本/分析解决方案的那些东西(工具)。优秀的 Brownfield Application Development in .NET 一书推荐了相同的方法。
    【解决方案4】:

    如果 B 是一个开源项目,并且你想用 A 编译它,我建议你尝试vendor drop 技术。这样您就可以保留自己的补丁。

    如果 B 是您公司的专有代码,并且您不想编译它,只需将编译后的二进制文件复制到 A' 存储库中会容易得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-15
      • 2019-08-24
      • 2011-08-16
      • 2018-03-03
      • 2011-06-11
      • 2010-12-11
      • 2012-10-09
      相关资源
      最近更新 更多