我继承了一个用
PHP 5.3.x,Symfony2和Composer构建的项目,用于依赖管理.
composer.json文件有很多这样的行:“vendorname / library”:“dev-master”表示正在使用的库的版本.它最后一次编辑于2012年8月,并且由于composer.lock文件存在且项目在我们主机的服务器上运行,因此显然有效.
谢天谢地,对composer.lock进行了一次小调整,我让作曲家安装工作,但我现在要做的是修复运行作曲家更新时遇到的一些失败.网上有很多关于作曲家依赖地狱的帖子 – 而且我在河上的一条漏水船上朝着那里拔头发.
简而言之,几年前当composer.lock被创建时,该项目与当时版本的几十个包含供应商库的“dev”一起工作,但现在我正在努力清理这些混乱,我想将正确的版本放入composer.json并尝试从已知状态更新内容.
如何通过composer install发现实际安装的版本?或者composer.lock文件中的键/值告诉你这个?
我在composer.lock文件中有很多github提交哈希,但是给定一个任意提交哈希并不清楚最接近的标记版本是用composer.json替换相应的行.
这是composer.json的一个示例行:
"doctrine/doctrine-bundle" : "dev-master",
这是该模块的composer.lock中的相应节点:
{
"name": "doctrine/doctrine-bundle",
"version": "dev-master",
"target-dir": "Doctrine/Bundle/DoctrineBundle",
"source": {
"type": "git",
"url": "http://github.com/doctrine/DoctrineBundle.git",
"reference": "d3c930599723c8343472a5791b0f5909a4111a73"
},
"dist": {
"type": "zip",
"url": "https://github.com/doctrine/DoctrineBundle/zipball/d3c930599723c8343472a5791b0f5909a4111a73",
"reference": "d3c930599723c8343472a5791b0f5909a4111a73",
"shasum": ""
},
"require": {
"doctrine/dbal": ">=2.2,<2.4-dev",
"php": ">=5.3.2",
"symfony/doctrine-bridge": "2.1.*",
"symfony/framework-bundle": "2.1.*"
},
"require-dev": {
"doctrine/orm": ">=2.2,<2.4-dev",
"symfony/validator": "2.1.*",
"symfony/yaml": "2.1.*"
},
"suggest": {
"doctrine/orm": "The Doctrine ORM integration is optional in the bundle."
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-0": {
"Doctrine\\Bundle\\DoctrineBundle": ""
}
},
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Symfony Community",
"homepage": "http://symfony.com/contributors"
}
],
"description": "Symfony DoctrineBundle",
"homepage": "http://www.doctrine-project.org",
"keywords": [
"DBAL",
"Database",
"ORM",
"Persistence"
],
"support": {
"source": "https://github.com/doctrine/DoctrineBundle/tree/master",
"issues": "https://github.com/doctrine/DoctrineBundle/issues"
},
"time": "2012-09-10 15:12:44"
}
我猜测作曲家会安装来自composer.lock的dist-> url或source-> url,但我有几十个模块可以通过,并想知道如何为每个引用的库找到最接近的(按日期)标记来创建一个理智的composer.json文件,可以继续更新我们的代码.