Php 使用Composer时,如何处理将存储库放在另一个存储库中的问题?

Php 使用Composer时,如何处理将存储库放在另一个存储库中的问题?,php,git,composer-php,Php,Git,Composer Php,我有一个项目,我使用Git在这个项目中进行版本控制。在这个项目中,我必须添加一些库作为依赖项(更具体地说是PHPUnit和Guzzle)。要求说这些库必须位于我的项目的文件夹中,我必须使用composer来安装/更新它们 我这样做了,我的目录结构如下所示: project |----- .git |----- libs |---- guzzle |---- .git |---- phpunit |--

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

我这样做了,我的目录结构如下所示:

project
|----- .git
|----- libs
        |---- guzzle
                |---- .git
        |---- phpunit
                |---- .git
因此,
guzzle
phpunit
文件夹都有一个单独的
.git
文件夹。这是因为,据我所知,composer从github复制了主分支,以便检索这些库的源代码

因此,我在远程存储库上执行了提交+推送。但是,当其他人从该存储库中提取时,
libs/guzzle
libs/phunit
文件夹中包含的文件不会出现在该人的工作目录中

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

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

我还考虑过删除
.git
目录,但如果我尝试在几个月内更新
编写器,这不会破坏一切吗


过去有没有人有过这样的问题?你是怎么解决的?

很明显,正如前面提到的,我想做的是个坏主意。我必须找到另一种安装/使用这些库的方法。

显然,正如前面提到的,我试图做的是一个坏主意。我必须找到另一种安装/使用这些库的方法。

显然,正如前面提到的,我试图做的是一个坏主意。我必须找到另一种安装/使用这些库的方法。

显然,正如前面提到的,我试图做的是一个坏主意。我必须找到安装/使用这些库的其他方法。

我有一些评论和解释

首先,您使用Composer创建了
git clone
artifacts。虽然这并不是完全不好,但应该避免,因为克隆活动项目的repo通常比安装发布版本的数据要多得多

尝试使用
——如果可以,请选择dist
这将下载该版本的ZIP文件,而不是从Github克隆。请注意,此选项是稳定版本的默认选项,这就引出了下一点

请使用稳定版本。如果可以避免,请不要使用
dev master
版本。你提到过使用PHPUnit和Guzzle。这两个版本都以稳定的版本发布,您可以使用。去做吧。使用不稳定的开发版本对这两个库没有好处,除非您绝对需要一个特性。使用不稳定版本的问题可能不会立即显示出来。但想想半年后会发生什么。有人更新了您的依赖项,指向
dev master
,它现在指向此后发生的任何事情。PHPUnit或Guzzle可能有一个新的主要版本,其中包含不兼容的更改。现在你的项目不必要地中断了

另一件事是需要将外部库放在定义的文件夹中。这是可行的,但实际上不应该这样做。Composer确实可以处理任何文件夹,但我通常在顶级目录中看到
Composer.json
时会得到一个
vendor
文件夹,其中包含
autoload.php
。改变这一点需要向新的开发人员做更多的解释,他们可能也希望Composer尽可能以默认方式工作。因为没有理由将Composer管理的依赖项放在任何地方,所以最好将它们放在每个人都期望的地方如果不需要,请不要更改
供应商
文件夹。


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

我有一些评论和解释

首先,您使用Composer创建了
git clone
artifacts。虽然这并不是完全不好,但应该避免,因为克隆活动项目的repo通常比安装发布版本的数据要多得多

尝试使用
——如果可以,请选择dist
这将下载该版本的ZIP文件,而不是从Github克隆。请注意,此选项是稳定版本的默认选项,这就引出了下一点

请使用稳定版本。如果可以避免,请不要使用
dev master
版本。你提到过使用PHPUnit和Guzzle。这两个版本都以稳定的版本发布,您可以使用。去做吧。使用不稳定的开发版本对这两个库没有好处,除非您绝对需要一个特性。使用不稳定版本的问题可能不会立即显示出来。但想想半年后会发生什么。有人更新了您的依赖项,指向
dev master
,它现在指向此后发生的任何事情。PHPUnit或Guzzle可能有一个新的主要版本,其中包含不兼容的更改。现在你的项目不必要地中断了

另一件事是需要将外部库放在定义的文件夹中。这是可行的,但实际上不应该这样做。作曲家确实可以处理任何文件夹,但我看到<