【问题标题】:Using source controlled libraries in source controlled projects [closed]在源代码控制项目中使用源代码控制库 [关闭]
【发布时间】:2010-07-03 10:58:33
【问题描述】:

我有几个构建可重用库的项目。所有这些项目都在源代码控制之下。

当我在项目中使用这些库时,我只需链接到本地​​驱动器上的同一个版本。但是,正如您可以想象的那样,当我再次提交时,这可能会导致问题,并且其他开发人员尝试克隆存储库。

在源代码控制下使用组件时的最佳做法是什么?我应该在“主项目”源代码控制中包含“库项目”吗?这会导致问题吗?

注意:这些库需要相当多的编译器指令,因此几乎不可能只编译静态版本并链接到该版本。另外,我仍在并行开发它们。

【问题讨论】:

    标签: project-management mercurial version-control


    【解决方案1】:

    您有两种主要的依赖关系:

    • 源依赖项(您需要在项目的源代码中包含来自另一个项目的源代码),
    • 二进制依赖项(您需要包含一组打包的文件,例如在共享库中找到的文件)。

    如果,当您说“我在项目中使用这些库”时,您的意思是您需要二进制文件才能编译您的项目,那么您可以将所述二进制文件存储在外部存储库中(即不是 (D)VCS像 Mercurial,但 artifact repository like Nexus)

    但是,如果您的意思是您需要包含源代码,因为您在使用这些库开发项目的同时也对这些库进行了一些改进,那么Mercurial subrepos 更合适。

    【讨论】:

      【解决方案2】:

      根据我自己的经验,通过使用导出映射为客户端程序提供多个版本的接口,可以极大地改善与同时编写的库的兼容性。我所知道的最好的指南是 Ulrich Drepper 的 http://people.redhat.com/drepper/dsohowto.pdf

      【讨论】:

        【解决方案3】:

        如果库在您的源代码控制之下,生活应该很轻松。我倾向于做的和我对不同版本的第三方库做的一样:为不同的版本设置不同的文件夹。

        第三方库文件夹结构如下:

        - General
          - Delphi
            - Components
              - LibX
                - LibX 9.2.1.3890
                - LibX 10.1.0.7151
              - LibY
                - LibY 3.6
                - LibY 5.1
            - Plugins
        

        每个项目都定义了对每个库的特定版本的依赖关系。恢复到项目的旧版本,因此也会将依赖项恢复到旧版本的库。

        现在,对于第三方库,您通常没有像使用自己的库那样多的不同版本,但同样的原则适用。并且为了帮助“当前开发”——在您还没有特定版本号的情况下,您可以简单地拥有一个“头”版本。然后,当您“发布”您的库的一个版本时,只需添加该版本的文件夹并调整由于并行开发而使用“头”的项目定义,以依赖于新版本号...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-22
          • 1970-01-01
          • 2010-09-19
          • 2012-07-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多