【问题标题】:Should I git clone my dependencies?我应该 git 克隆我的依赖项吗?
【发布时间】:2014-06-12 20:20:07
【问题描述】:

假设我有一个将使用某些 Google API 的项目。为了让我更容易使用 API,我想使用 Google 提供的 PHP 库 (https://github.com/google/google-api-php-client) 我应该将它克隆到我当前的项目中,然后将其添加到 .gitignore 中吗?我应该克隆它并开始使用 git 模块,还是应该只复制我需要的文件并将它们添加到 .gitignore?

另一种情况是当我使用我创建的并且我在本地拥有的库时。我应该将它们克隆到当前项目中吗?我应该为我需要的文件创建符号链接吗?

最后,除了将代码托管在 github 中之外,还有一些库还提供“独立”文件。以 jQuery 为例。在这些情况下,最好只下载他们提供的文件吗?还是将存储库克隆到当前项目中更好?

我猜这一切都与软件架构有关。有没有关于该主题的书籍推荐?

【问题讨论】:

  • 由于您使用的是 PHP,packagist.org 用于 PHP 包,bower.io 用于 JavaScript。
  • 谢谢,但这不考虑依赖项不在其中任何一个或其他包/依赖项管理的情况,例如当您使用私有库或不在其中的公共库时那些系统。
  • 两者都很简单。将 composer 与任意存储库一起使用:getcomposer.org/doc/… 将 composer 与私有存储库一起使用:getcomposer.org/doc/… Bower 还支持私有存储库。两个包管理器都允许作者以外的人发布包。
  • 听起来好多了 :D 我会确保检查作曲家。我以前听说过,但从来没有真正花时间仔细研究过。
  • 和 Bower 一起做:*.com/questions/20196707/…

标签: git code-organization


【解决方案1】:

为此用例制作了包管理器。

在 PHP 中,主要的包管理器是 Composer,可以在 Packagist.org 上找到它的包。根据 Google API PHP 客户端存储库中的composer.json 文件,它的包是https://packagist.org/packages/google/apiclient

Composer 会将这些库(连同一个自动加载文件)安装在一个名为 vendor 的目录中,您可以将其添加到 .gitignore,这样它们的内容就不会被提交。 Composer 根据您的 composer.json 文件处理依赖项的安装和更新。

对于 JavaScript 库,http://bower.io/ 经常使用(尽管许多 JS 库也可以通过 Composer/Packagist 获得)。

这两种工具都允许使用任意和/或私有存储库。

【讨论】:

  • 太好了,感谢您将其作为答案。它与 cmets 基本相同,但我可以将其标记为已接受的答案。正如我之前所说,我知道这两个包管理器,但从未真正看过它们超过 5 分钟。我想我会仔细看看,并开始使用它们。在 bower 的情况下,我可能会坚持使用 npm,并且仅当库不在 npm 中时才使用 bower。另外,当我需要使用私人项目时,我会使用 bower。谢谢。
  • 很高兴我能帮上忙。我没有意识到 jQuery/Bootstrap/et al。在 NPM 中,所以这是另一个很好的解决方案。我怀疑 NPM 也可以处理任意 repos。作为一名 PHP 开发人员,Composer 从长远来看会让你非常开心。
  • 我一直不愿意使用作曲家,谁知道是什么原因。我只是还没有这样做,但我现在肯定会这样做。
【解决方案2】:

我的方式:

  • 将要修改的所有代码安装为“可编辑”(git/hb/bzr 克隆)。
  • 所有其他库都作为包安装
  • 每个系统都有一个自己的 linux 用户(用户名方案:coreapp_customer_stage)
  • 每个 linux 用户都有自己的 virtualenv (Python)
  • 如果您 ssh 到帐户,则会自动进入 virtualenv。
  • 自动设置新的开发帐户。
  • 如果所有测试都通过,则执行版本固定(pip freeze)。

对于您的示例: jquery:您要修改 jquery 吗?我猜不是:不要克隆它。

【讨论】:

  • 这在诸如 python 之类的环境中运行良好,您可以在其中全局安装包,并从一个公共位置包含它们,但不适用于 php 或 js 等依赖项通常安装在项目目录中的环境。不过,不要克隆我不想编辑的东西是有道理的。
  • @Buzu 今天大多数 python 人使用 virtualenv。这是一个孤立的环境,您全局安装软件包。 “全局”是指“/usr/lib..”(根级别)。
  • 哦,我不知道。我会看看。谢谢
最近更新 更多