将所有项目依赖项放入项目的存储库中是好的做法吗?
Is putting all project dependencies inside project's repository good practice?
我有一个项目,使用一对(目前~6)依赖关系(其他库)。它们中的大多数都是基于MIT/简化BSD许可证,所以把它们复制到我的repo应该没有问题。
将所有这些库放到我的repo中并推送它们(当新版本出现时,也更新它们)会是一个好的实践吗?或者我的项目仓库应该只包含项目文件(代码,资产等)?
优点:
- 的建设是如此简单,因为我有我所需要的一切总是关闭
- 添加的库意味着我使用这些版本测试了我的项目,因为其他版本(旧的/新的)可能会产生一些问题
缺点:
-
project repo臃肿
-
必须手动更新依赖项
-
如果我想粘贴也构建版本,我将不得不粘贴很多
-
文件,它会占用很多空间,所以可能坚持源代码只有吗?
-
一些库可能没有那么好的许可证,直接使用它们(而不是要求用户自己获得有效的库)并将它们放在我的repo中可能会产生一些麻烦
-
有更多的项目来保持依赖关系意味着我必须在同一时间为所有项目更新它们(例如,如果我根据当前项目(它的库)制作一些其他项目,那么它们都将具有相同的依赖关系)
简短的回答:看情况。
长答:
在你质疑在你的存储库中包含代码是否合适之前,你应该问一下是否应该严格控制依赖关系,或者更放松。
这个问题的答案取决于你如何发布你的项目,你的客户/用户想要什么,你是否需要对依赖项进行任何源代码更改,以及任何其他项目需求。
例如,假设您正在销售一个硬件设备,您的代码是该设备的固件。在这种情况下,您可能希望严格控制依赖关系(需要非常特定的版本)。这使您可以完全控制整个系统,从而简化了系统测试,如果您的设备需要满足某些安全、保障或可靠性要求(例如,它是一个医疗设备或发送到冥王星的探测器),这一点非常重要。通常,如果您以二进制或文件系统映像的形式分发产品,则可能需要使用固定依赖项。
如果您希望用户能够动态链接到其系统附带的依赖项的任何版本(这在许多原因上都很有价值,包括安全更新),那么您可能希望放宽要求。弄清楚支持哪些版本,限制自己使用这些版本中可用的文档api,使用工具来强制执行需求(如果依赖项太旧就会出错),并针对尽可能多的依赖项版本测试代码。
一旦你知道你想要多么严格地控制你的依赖关系,你就可以选择用来管理它们的机制。您可以使用Apache Ivy之类的工具自动获取依赖项,GNU Autoconf强制执行特定版本,或者您可以将代码拉入Git存储库并自己构建它。具体的选择并不重要;
- 将文件内容存储到unordered_map仅存储最后的项目和值
- 从文本文件读取,然后将项目存储到列表中
- 自动完成在git存储库中的Visual Studio项目中不起作用
- git 子模块的替代方案,用于使用多个存储库的项目
- OpenCV:文件存储操作员">>"在一个项目中工作,但不在另一个项目中工作(在同一类上)
- bazel 项目将其".so"文件存储在哪里?
- 鸟类调查中的项目在代码中遇到问题.如何像数据库系统一样存储数据
- 带有数据存储库的C Bazel项目
- 是放置在存储在堆栈或堆中的unordered_map中的项目
- 在开源项目中存储 OAuth 机密
- 如何将 .c 和 .h 文件存储在包含路径中,与当前项目的源代码分开
- 将十六进制值存储为字符串(Arduino项目)
- 将项目存储在地图中的多个键下
- 是否可以将 VS C++ 项目生成的 DLL/EXE 项目存储在 NuGet 包中
- 如何在多个 GIT 存储库中组织大型项目
- 如何在C++中存储从 Vector 弹出的项目
- 其中是调试信息(断点等)存储在本机C++dll项目VS2013中的位置
- QList如何决定是存储指针还是存储项目本身
- Visual Studio: c++项目包含路径在存储库上共享
- 我应该在什么时候为我的项目创建一个存储库