Php 使用Composer时,如何处理将存储库放在另一个存储库中的问题?
我有一个项目,我使用Git在这个项目中进行版本控制。在这个项目中,我必须添加一些库作为依赖项(更具体地说是PHPUnit和Guzzle)。要求说这些库必须位于我的项目的文件夹中,我必须使用composer来安装/更新它们 我这样做了,我的目录结构如下所示:Php 使用Composer时,如何处理将存储库放在另一个存储库中的问题?,php,git,composer-php,Php,Git,Composer Php,我有一个项目,我使用Git在这个项目中进行版本控制。在这个项目中,我必须添加一些库作为依赖项(更具体地说是PHPUnit和Guzzle)。要求说这些库必须位于我的项目的文件夹中,我必须使用composer来安装/更新它们 我这样做了,我的目录结构如下所示: project |----- .git |----- libs |---- guzzle |---- .git |---- phpunit |--
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可能有一个新的主要版本,其中包含不兼容的更改。现在你的项目不必要地中断了
另一件事是需要将外部库放在定义的文件夹中。这是可行的,但实际上不应该这样做。作曲家确实可以处理任何文件夹,但我看到<