Rip*_*peR 8 c++ git dependencies repository repository-design
我有一个项目使用几个(目前〜6)依赖项(其他库)。它们中的大多数都使用 MIT/简化的 BSD 许可证,因此将它们复制到我的存储库应该不是问题。
将所有这些库放入我的存储库并推送它们(当新版本出现时,也更新它们)是否是一个好习惯?或者我的项目存储库应该只包含项目文件(代码、资产等)?
优点:
缺点:
项目回购中的膨胀
必须手动更新依赖项
如果我想粘贴也构建的版本,我将不得不粘贴很多
文件,这会占用大量空间,所以可能只坚持源代码?
有些库可能没有那么好的许可证,直接使用它们(除了要求用户自己获取有效的库之外)并将它们放在我的存储库中可能会带来一些麻烦
拥有更多项目来保持依赖关系意味着我必须同时更新所有项目的它们(例如,如果我根据当前项目(它的库)创建一些其他项目,那么它们都将具有相同的依赖关系)
简短的回答:这取决于。
长答案:
在您询问是否适合将代码包含在存储库中之前,您应该询问是否适合严格控制依赖项或更加放松。
答案取决于您如何分发项目、您的客户/用户想要什么、是否需要对依赖项进行任何源代码更改以及任何其他项目要求。
例如,假设您正在销售硬件设备,并且您的代码是该设备的固件。在这种情况下,您可能希望严格控制依赖项(需要非常特定的版本)。这使您可以完全控制整个系统,从而简化系统测试,并且如果您的设备受到某些安全、安保或可靠性要求(例如,它是医疗设备或发送到 Pluto 的探测器),这可能很重要。一般来说,如果您以二进制或文件系统映像的形式分发产品,您可能需要使用固定依赖项。
如果您希望用户能够动态链接其系统附带的任何版本的依赖项(这由于多种原因很有价值,包括安全更新),那么您可能需要放宽要求。明确支持哪些版本,将自己限制在这些版本中可用的已记录的 API,使用工具来强制执行要求(如果依赖项太旧,则会出错),并针对尽可能多的依赖项版本测试您的代码。
一旦您知道要如何严格地控制依赖项,您就可以选择用于管理它们的机制。您可以使用 Apache Ivy 等工具自动获取依赖项,使用 GNU Autoconf 来强制执行特定版本,或者您可以将代码拉入 Git 存储库并自行构建。具体的选择并不那么重要;重要的是。使用满足您的要求并且对您和您的用户来说最简单的任何内容。