使用git管理库依赖项

cel*_*vek 8 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
  | ...
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

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

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

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

谢谢

Von*_*onC 2

仍然可以遵循您的项目的另一种选择是使用git-annex,它允许您跟踪头文件,同时将二进制文件存储在其他地方。然后每个 git repo 都可以作为子模块
添加到您的主项目中。