如何在源代码管理中存储第三方库?

ajm*_*jma 26 version-control

如何在源代码管理中存储项目中使用的第三方库?

您何时在源代码管理中存储二进制文件?

您何时将代码存储在源代码管理中?

你会存两个吗?在什么情况下你会这样做?

(顺便说一下,我正在使用.NET,但对于这个问题并不重要)

Von*_*onC 10

  • 试问:一个卖主分支通常是一个好方法

  • 当(第三方):为了最大限度地减少参与的数量:你可以将这些库添加到一个单独的外部参照(如Maven),但这意味着你需要访问每个环境的额外参考(开发 - 集成 - 认证 -预生产 - 生产)

  • 当(代码):用于管理的变化的复杂性,当你知道运行投产当前版本的更新和修复将需要而新的开发正在进行中.

  • 为什么(存储两者):出于部署原因:您可以在一个参考中管理完整的配置(您需要的元素列表),并随时随地查询:

    • 开发(您查询开发和执行代码所需的内容,包括编译/执行所需的第三方)
    • 测试(集成,认证):您查询要更新测试工作区的精确标记
    • 生产:您确切地从一个来源确定生产的内容:您的SCM.

对于测试和生产环境,这也意味着您自己的产品(您正在构建的产品的打包结果)也应该进入您的SCM(仅限官方版本,而不是内部使用的中间版本).
如果其他项目依赖于您的产品,他们将针对存储在SCM中的打包版本构建自己的项目,而不是针对他们以某种方式重新编译的源代码.

为什么这很重要?
因为最终,生产中将运行的是产品的打包版本,而不是您的"源代码重新编译".因此,重要的是使用产品的目标最终形式进行所有测试,并在SCM中明确存储和标记.


Martin Lazar在他的回答中提出了一个合理的观点

源控件称为"源"控件,因为它应该控制源.

虽然这可能在历史上是正确的,但每个当前的RCS都已发展为SCM(源代码管理),它不仅控制源,还管理对作为计算机文件存储的文档,程序和其他信息的更改.
然后可以存储二进制文件(甚至以二进制增量存储)

另外,这允许一些SCM提出S"C"M功能(如在源配置管理中).
SCM(配置)不仅存储任何类型的"文件集",还存储它们之间的关系(也称为依赖关系),以便您查询一组文件,并"拉"每个其他的交付.该集依赖于(构建或部署或运行​​)

  • @ jgomo3我同意.依赖关系的声明方法比在repo中存储实际依赖关系更好. (2认同)

dir*_*tly 5

如何在源代码管理中存储在项目中使用的第三方库?

作为二进制或源或两者兼而有之。取决于库。

您何时将二进制文件存储在源代码管理中?

我们没有源的第三方库,或者我们没有对其进行任何更改的内部库,或者该库太大而无法构建。

什么时候将代码存储在源代码管理中?

说,我们使用内部库A,但已修复了一些特定于产品X的错误。然后,产品X的软件仓库将保留源代码并进行构建。

您会同时存储两者吗?在什么情况下您会这样做?

是的,所有最新的二进制文件都存储在源代码管理中。

所以树看起来像这样:

产品

 |-- src

 |-- build

 |-- lib

       |- 3rdparty

       |- internal
Run Code Online (Sandbox Code Playgroud)

...