在源控制项目中使用源控制库

时间:2010-07-03 10:58:34

标签: project-management mercurial version-control

我有几个构建可重用库的项目。所有这些项目都受源头控制。

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

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

注意:这些库需要很多编译器指令,所以几乎不可能只编译静态版本并链接到它。另外我还在同时开发它们。

3 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果库在您的源代码控制之下,那么生活应该很简单。我倾向于做的就像我对不同版本的第三方库所做的那样:为不同版本提供不同的文件夹。

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

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

每个项目都定义了它对每个库的特定版本的依赖性。恢复到旧版本的项目,因此也将依赖项还原到旧版本的库中。

现在使用第三方库,您通常没有与自己的库一样多的不同版本,但适用相同的主体。并且为了帮助“当前开发” - 你还没有特定的版本号,你可以简单地拥有一个“头”版本。然后当你“发布”你的库的一个版本时,只需添加该版本的文件夹并调整项目定义,直到知道因为并行开发而使用“head”,依赖于新版本号...