繁体   English   中英

使用Composer时如何处理另一个存储库中的存储库?

[英]How do I handle having a repository inside another repository when using Composer?

我有一个项目,我使用Git在该项目中进行版本控制。 在这个项目中,我必须添加一些库作为依赖项(更具体地说是PHPUnit和Guzzle)。 要求说这些库必须位于我项目的文件夹中,并且我必须使用composer来安装/更新它们。

所以我做到了,我的目录结构看起来像这样:

project
|----- .git
|----- libs
        |---- guzzle
                |---- .git
        |---- phpunit
                |---- .git

因此, guzzlephpunit文件夹中都有一个单独的.git文件夹。 据我所知,这是因为作曲家从github复制了master分支,以便检索这些库的源代码。

因此,我在远程存储库上进行了一次commit + push。 然而,当别人从仓库拉,包含在文件libs/guzzlelibs/phunit文件夹不会出现在此人的工作目录。

我在想这是因为有2个.git文件夹。

我怎样才能解决这个问题 ? 我尝试在composer的文档中搜索一种在composer.json指定的方法,以便仅获得最后的快照。 但是我什么也找不到。

我还考虑过删除.git目录,但是如果我尝试在几个月内进行composer update ,那不会破坏一切吗?

过去有人遇到过这种问题吗? 您是如何解决的?

显然,我想要做的是一个糟糕的主意,因为提到这里 我将不得不找到另一种安装/使用这些库的方式。

我有一些评论和解释。

首先,您对Composer的使用创建了git clone人工制品。 尽管这并不十分糟糕,但应避免使用它,因为克隆活动项目的存储库通常比安装已发布的版本多得多的数据。

如果可以,请尝试使用--prefer-dist 这将下载该版本的ZIP文件,而不是从Github克隆的文件。 请注意,此选项是稳定版本的默认选项,这将使我进入下一步。

请使用稳定版本。 如果可以避免,请不要使用dev-master版本。 您提到使用PHPUnit和Guzzle。 两者均以可用的稳定版本发布。 做吧 这两个库使用不稳定的开发版本没有任何好处,除非您绝对需要某个功能。 使用不稳定版本的问题可能不会立即显示。 但是考虑一下半年后会发生什么。 有人更新了您的依赖,指向dev-master ,它现在指向此后发生的一切。 PHPUnit或Guzzle可能有一个新的主要版本,具有不兼容的更改。 现在,您的项目不必要地中断了。

另一件事是要求将外部库放在定义的文件夹中。 这是可行的,但实际上不应该这样做。 Composer可以使用任何文件夹,但是我通常会在顶级目录中看到composer.json ,这是希望得到一个包含autoload.phpvendor文件夹。 更改此设置需要向新开发人员提供更多解释,新开发人员也可能希望Composer尽可能使用默认设置。 因为没有理由将Composer管理的依赖项放在任何地方,所以最好将它们放在每个人都期望的位置。 无需更改vendor文件夹。

最后一点是: 提交composer.lock ,但不要提交vendor文件夹。 这是因为供应商文件夹可能包含外部库使用的源代码管理系统的跟踪,而这些跟踪跟踪可能会使您的项目的源代码管理混乱。 正确的工作流程是commit composer.lock ,每个签出您的项目的人都必须运行composer install来从互联网上获取这些依赖项。 这也适用于执行签出的部署脚本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM