取决于GitHub存储库上的特定目录

时间:2015-02-05 23:51:32

标签: php composer-php

我需要在我的项目中包含Erfurt库。而不是手动将库复制到供应商目录中,我想说Composer从GitHub下载它。爱尔福特不是作曲家图书馆,我。即没有composer.json。

使用以下composer.json,我可以从Git下载Erfurt:

{
    "repositories": {
        "erfurt": {
            "type": "package",
            "package": {
                "name": "erfurt/erfurt",
                "version": "1.0.0",
                "source": {
                    "url": "https://github.com/AKSW/Erfurt.git",
                    "type": "git",
                    "reference": "5528b95ac3"
                }
            }
        }
    },
    "require": {
        "zendframework/zendframework1" : "1.12.*",
        "erfurt/erfurt": "1.0.0"
    },
    "autoload": {
        "classmap": ["vendor/Erfurt"]
    },
    "include-path": ["vendor"]
}

Composer将完整的Git存储库下载到 vendor \ erfurt \ erfurt 目录中,但我只需要存储库的子目录library/Erfurt

我用

测试了它
"url": "https://github.com/AKSW/Erfurt.git/library/Erfurt"

但没有成功。 有没有选择建议Composer只下载GitHub repositoy的子目录?

2 个答案:

答案 0 :(得分:1)

答案是:否。无法将Composer配置为仅下载子部件。

你要么必须向该项目提出一个.gitattributes文件,过滤掉你不想要的一切(不太可能被接受,但那是另一个讨论 - 你也可以提出一个合适的composer.json文件),然后强制Composer到--prefer-dist,这将从Github下载ZIP版本而不是克隆 - 并从ZIP中删除过滤后的文件。

或者您可以手动创建该软件的本地发布流程,该流程将创建您想要的ZIP,而不是指向官方Github存储库,您可以指向您创建的ZIP。

答案 1 :(得分:1)

正如@Sven回答的那样,用Git是不可能的。但是GitHub还提供SVN访问,而Composer可以读取SVN存储库的某个子目录。这就是它最终的运作方式:

{
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "erfurt/erfurt",
                "version": "1.0.0",
                "source": {
                    "type": "svn",
                    "url": "https://github.com/AKSW/Erfurt",
                    "reference": "trunk/library/Erfurt"
                }
            }
        }
    ],
    "require": {
        "zendframework/zendframework1" : "1.12.*",
        "erfurt/erfurt": "1.0.0"
    },
    "autoload": {
        "classmap": ["vendor/erfurt/erfurt", "vendor/zendframework/zendframework1/library/Zend"]
    },
    "include-path": ["vendor/erfurt", "vendor/zendframework/zendframework1/library"]
}

现在我可以运行这个脚本了:

<?php
require_once __DIR__.'./vendor/autoload.php';

$erfurt = \Erfurt_App::getInstance();
$erfurt->loadConfig(
    new \Zend_Config(
        array(
            'store' => array(
                'backend' => 'virtuoso',
                'virtuoso' => array(
                    'dsn' => 'VOS',
                    'username' => 'dba',
                    'password' => 'dba'
                )
            )
        )
    )
);
$erfurt->authenticate('dba', 'dba');
$store = $erfurt->getStore();
$graphs = $store->getAvailableModels();
echo '<pre>' . var_dump($graphs) . '</pre>';