使用git管理库依赖项

时间:2011-08-03 09:51:03

标签: c++ c git version-control

我有一个为多个操作系统(现在是Linux和Windows,可能是OS X)和处理器而构建的项目。对于这个项目,我有一些库依赖项,它们是男性外部的,但我有几个内部的,以源代码形式,我为我的上下文中可能的每个OS处理器组合编译(交叉编译)。

大多数外部库不会经常更改,只是在本地错误修复或某些功能\ bugfix在较新版本中实现的情况下,我认为它可能会使项目受益。内部库经常更改(1个月周期)并由我公司的另一个团队以二进制形式提供,虽然我也可以访问源代码,如果我需要修复错误,我可以这样做并生成新的二进制文件我的使用直到下一个发布周期。我现在的设置如下(仅限文件系统):

-- dependencies
  |
   -- library_A_v1.0
     |
      --include
     |
      --lib
  |
   -- library_A_v1.2
     |
      --include
     |
      --lib
  |       
   -- library_B
     |
      --include
     |
      --lib
  | ...

这些库保存在服务器上,每次进行更新时,我都必须在服务器上复制任何新的二进制文件和头文件。客户端上的同步使用文件同步实用程序完成。当然,库的任何更新都需要向其他开发人员公布,每个人都必须记住同步他们的“依赖”文件夹。

毋庸置疑,我不太喜欢这个计划。所以我想把我的库放在版本控制(GIT)下。构建它们,将它们打包成tgz \ zip并将它们推送到repo上。每个库都有自己的git存储库,这样我就可以轻松地标记\ branch已经使用过的版本和测试驱动器的新版本。每个库的“数据流”,我可以轻松获取,组合,更新。我想拥有以下内容:

  • 摆脱这种保存库的正常文件系统方式;现在,为每个操作系统和每个版本保存和管理完整的单独文件夹,有时它们不同步导致混乱

  • 对它的更多控制,能够清楚地了解我们用于哪个版本的项目的库的版本;很像我们可以从git(VCS)获得的源代码

  • 能够标记\ branch我正在使用的依赖项的版本(对于它们中的每一个);我有我的v2.0.0标签/分支用于library_A我通常把它用于我的项目,但我想测试驱动2.1.0版本,所以我只是构建它,在不同分支上的服务器上推送它并调用我的构建脚本,该特定依赖项指向新分支

  • 有更简单的构建脚本 - 只需从服务器中提取源,拉出依赖项并构建;这也允许同一个库的不同版本用于不同的处理器-OSO组合(我们通常需要更多)

我试图找到基于git的直接解决方案的一些替代方案,但没有取得多大成功 - 比如git-annex这对于我正在尝试做的事情似乎过于复杂。

我现在面临的事实是,似乎非常强烈反对将二进制文件放在git或任何VCS下(虽然从技术上讲我也会有头文件;我也可以推送我描述的文件夹结构直接给git没有tgz \ zip,但我仍然会有库二进制文件)而且我的一些同事,在共同的强烈意见的推动下,反对这种方案。我完全理解 git跟踪内容而不是文件,但在某种程度上我会跟踪内容,我相信它肯定会比我们现在的方案有所改进。

对于这种情况,什么是更好的解决方案?你知道基于git(VCS)的方案的任何替代品吗?将我的计划置于git :)下会是一件多么可怕的事吗?请分享您的意见,特别是您在处理这些情况时的经验。

由于

1 个答案:

答案 0 :(得分:2)

一个替代方案,它仍然适用于您的项目,将使用git-annex,这将允许您跟踪头文件,同时保持二进制文件存储在其他地方。
然后,每个git repo都可以作为submodule添加到您的主项目中。