-->

管理源代码控制下使用的代码的第三方源和二进制文件(Managing 3rd party source

2019-06-26 00:58发布

我有源控制下的大的代码基础(是颠覆,现在GIT)。 要编译代码并运行我用一组第三方库的测试。 这些库可以分为几categoriesL

  • 只有二​​进制
  • 第三方来源
  • 第三方来源+本地修改

每个图书馆都有{在Windows,Linux} X ^调试,释放} X ^ 32位,64位}配置。 除了这些库的时间和不同的版本,我的项目的演变使用不同版本/建立这些库。

我的问题是什么是存储这些第三方的最好方法?

这是我的偏好组:

  1. 保持项目的源代码库小的尺寸
  2. 保持项目源同步与第三方,所以我总是可以编译和运行老版本
  3. 简单管理
  4. 跨平台

我想,以为几种解决方案,但均没有令人满意:

  1. 使用版本脚本从保存库的所有版本手动管理FTP服务器获取二进制文件。 这工作,但需要在服务器上的目录结构的精心管理。 这是很容易出错有人可能会覆盖一个新建二进制文件之一。
  2. SVN的外部 - 当时SVN的外部不能指代特定的标签。 今天我使用Git。
  3. Git的子模块 - 拉它可以是巨大的,整个外部存储库。 另外,它需要管理对每一个图书馆一个单独的存储库。 在一个特定的标签的子模块点,这意味着要么我得到的所有外部组件,当我需要一部分还是我模仿git的树一些奇怪的文件系统。

很显然,我认为第三方源需要被存储在混帐的卖主分支,但二进制文件和头是一个不同的故事。

Answer 1:

我的问题一个公平的解决方案是git的子树最近被合并到主线饭桶。 它提供了我的要求和平台的限制之间取得平衡。 现在,我对的外部多个存储库(每个人都有一个卖主分支以及本地更改分支)和各项目库需要这些外部对象到子文件夹的部分。 为了保持组织我保持“本”和“LIB”文件夹包含软链接到的外部组件的子文件夹中的相应文件/文件夹。

GIT-子树允许从外部库中的子树合并成一个子文件夹。 子文件夹可以合并前后与外部存储库。

优点缺点:

  1. 小库 - 库是不小,我想它是,但它仅包含从外部存储库的必要部分。 为了节省空间,我尽量保持外树小。 我认为这是一个很好的价格作为回报,当我得到简单性和鲁棒支付; 为加载和更新项目是一个简单的git拉和所有的项目相关的数据包含在单个存储库

  2. 项目/外部对象同步 - 由于该项目与外部对象在同一仓库的版本,我可以检出任何分支/标签我会想到它是工作。

  3. 简单 - 一天按一天工作是直线前进。 更新外部库,创建一个新的或切换到不同版本的外部可能会非常棘手,需要特殊的语法。 然而,这确实发生了太多。 最好的事情是,人们可以先添加一个新的外部到这个项目中,只有事后把它分解(使用Git树)到自己的仓库。

  4. 跨平台 - 那么它的混帐

  5. 双星 - 我决定避免持有的二进制文件,并提供Makefile文件来代替。 我来到这个决定我的一些外部组件依赖于其它的外部,这使得它很难建立一个不经常改变的二进制文件。 对于一些外部组件我做的存储二进制文件由于非常长的生成时间。

结构体:

/root
   /External
      /External1 (git-subtree from git@git.domain.com:External1 v1.0)
      /External2 (git-subtree from git@git.domain.com:External2 v0.7)
   /lib
      /libExternal1.a -> ../External/External1/libExternal1.a
      /libExternal2.a -> ../External/External1/libExternal2.a
   /include
      /External1 -> ../External/External1/include
      /External2 -> ../External/External2/include


Answer 2:

我们已经走了任你选择的变体3.选项1在我看来,等同于选项3,但对你的部分更实现/测试工作,因此更多的潜在出问题。

最后,如果你希望能够准确地重新创建一个构建,你需要你的外部(包括二进制文件)要与代码本身沿着版本和本地托管。 和Git子模块会做这样做对你的好工作。



Answer 3:

对于第三方来源,我觉得子模块你在寻找什么。 如果您不想要求每个克隆整个上游历史,前端上游回购与你自己的,包含手工分支只是必要的历史。 看看git commit-tree ,看看如何使这些,这很容易。 提交ID的不匹配权威的上游,但树ID的意志。

对于二进制文件,git的附件似乎是存储的不Git的源代码版本比较注重合身内容最推荐的方式。 我没有用它自己,但设计看起来可供生产使用外,还支持多个独立的`仓库,看起来大约是方便,因为它可以合理。

这不交钥匙,所以它并没有真正满足你的第三位,但它的指甲休息,你需要的是简单的利用基本工具。



文章来源: Managing 3rd party sources and binaries used by code under source control