【发布时间】:2010-03-29 09:16:16
【问题描述】:
我在 SO 和其他地方看到了很多关于“维护 VCS 中的公共库”。也就是说,项目 foo 和 bar 都依赖于 libbaz,提问者想知道他们应该如何导入源 将 libbaz 导入每个项目的 VCS。
我的问题是:WTF?如果 libbaz 是一个库,那么 foo 不需要它 源代码。有一些设计合理的库 以这种方式使用(例如 gnulib),但大部分是 foo 和 bar 应该只是链接到图书馆。
我想我的想法是:如果您将库的源代码剪切并粘贴到 你自己的源代码树,那么你显然不关心未来的更新 去图书馆。如果您关心更新,那么只需链接到 库并信任库维护者来维护稳定的 API。
如果您不相信 API 会保持稳定,那么您不能盲目 无论如何都要更新你自己的源代码副本,那么得到了什么?
总结一下这个问题:为什么有人想要维护一份 项目源代码中的库,而不仅仅是链接 该库并要求它作为依赖项?
如果唯一的答案是“不想要依赖”,那么为什么不只是 将库的副本与您的应用程序一起分发,但保留它们 完全分开?
【问题讨论】:
-
您能否将其格式化为更具可读性?
-
另外,请注意您说的是诸如 C 之类的语言。在 PHP 或 Ruby 等语言中,将外部库作为项目的一部分是很有意义的。此外,Git 有“子模块”的概念,这对此有很大帮助。
-
我刚刚格式化了文本,得到了 75%。但它现在更具可读性。
-
PHP 和 Ruby 是否不允许像 Perl 和 Python 那样导入模块?他们肯定有这种事情的机制吗?
-
@William,有可能,但会出现各种不兼容的情况。您图书馆的用户想要开箱即用的东西。还有其他一些情况,当一个库依赖于最近的“东西”,而另一个不能使用最近的“东西”时?用户此时应该做什么?
标签: version-control build-process dependencies