依赖于 GitHub 存储库上的特定目录
Depend on Specific Directory on GitHub Repository
我需要在我的项目中包含 Erfurt 库。我不想手动将库复制到 vendor 目录,而是让 Composer 从 GitHub 下载它。 Erfurt 不是 Composer 库,我。 e.没有 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 存储库的子目录?
答案是:不能。没有办法将 Composer 配置为只下载一个子部分。
您要么必须向该项目提出一个 .gitattributes
文件,过滤掉您不想要的所有内容(不太可能被接受,但这是另一个讨论 - 您也可以提出一个适当的 composer.json
文件),然后强制 Composer --prefer-dist
,这将从 Github 下载 ZIP 版本而不是克隆 - 并从 ZIP 中删除过滤后的文件。
或者您可以手动创建该软件的本地发布过程,它将准确地创建您想要的 ZIP,而不是指向官方 Github 存储库,您可以指向您创建的 ZIP。
正如@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>';
我需要在我的项目中包含 Erfurt 库。我不想手动将库复制到 vendor 目录,而是让 Composer 从 GitHub 下载它。 Erfurt 不是 Composer 库,我。 e.没有 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 存储库的子目录?
答案是:不能。没有办法将 Composer 配置为只下载一个子部分。
您要么必须向该项目提出一个 .gitattributes
文件,过滤掉您不想要的所有内容(不太可能被接受,但这是另一个讨论 - 您也可以提出一个适当的 composer.json
文件),然后强制 Composer --prefer-dist
,这将从 Github 下载 ZIP 版本而不是克隆 - 并从 ZIP 中删除过滤后的文件。
或者您可以手动创建该软件的本地发布过程,它将准确地创建您想要的 ZIP,而不是指向官方 Github 存储库,您可以指向您创建的 ZIP。
正如@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>';