我有类似的东西
"repositories": [
{
"type": "package",
"package": {
"name": "myrepo",
"version": "dev-master",
"source": {
"url": "https://github.com/me/myrepo.git",
"type": "git",
"reference": "master"
}
}
},
但是当Composer撤回回购时,origin
中的远程(composer
和.git/config
)设置为git://github.com/me/myrepo.git
。
[remote "origin"]
url = git://github.com/me/myrepo.git
fetch = +refs/heads/*:refs/remotes/origin/*
pushurl = git@github.com:me/myrepo.git
[branch "master"]
remote = composer
merge = refs/heads/master
[remote "composer"]
url = git://github.com/me/myrepo.git
fetch = +refs/heads/*:refs/remotes/composer/*
我无法推动它,因为Github不能与git://
一起使用。我必须手动将其更改为https://
然后再推送。我在网址中指定了https://
,但为什么这不受尊重?
答案 0 :(得分:18)
您可以使用以下命令更改用于github的协议:
composer config --global github-protocols https
然后重新安装供应商应该做你想做的事。
答案 1 :(得分:4)
github-protocols
选项仅适用于GitHub,但还有另一种方法可以解决不依赖于Git服务器使用GitHub的问题。
您只需告诉Composer使用不同的URL,就像您分叉包时一样,并且您希望确保Composer使用您的fork而不是默认包。
以下是我将自己的fork用于一个软件包的示例,我强制将URL中的协议强制为http
而不是git
用于另一个软件包:
"repositories": [{
"type": "vcs",
"url": "https://github.com/brandondrew/laravel4-PHPExcel"
},{
"type": "vcs",
"url": "http://git.code.sf.net/p/tcpdf/code"
}],
在Laravel4-PHPExcel的情况下,我早期修复了一个bug,并且在我等待维护者接受我的pull请求时需要我的修复。 (顺便说一下,他已经对他的代码做了很多改进,所以我放弃使用我的前叉,但是我在这里显示它,因为它&#39 ;作为一个例子很有用,即使我的代码在实践中不再有用。)
在TCPDF的情况下,它们是我的应用程序使用的唯一一个指定Git协议的软件包,因此,当我可以使用时,请求我的客户端位置的安全团队打开端口9418似乎很荒谬相反,HTTP(在我看来)他们应该习惯于开始。我在URL中更改的所有内容都将git
替换为http
,但它与任何其他用户指定的URL一样,允许您指定Composer用于给定包的URL。
<强>更新强>:
仅仅为了完成,我觉得我应该提到你也可以在Git级别解决问题。对于我遇到此问题的应用程序,我觉得在Composer中执行此操作更合适,但您的情况可能会有所不同,因此您对此情况的最佳方法的看法也是如此。
Git方法可以更加全局化,您可能会认为这是一种优势(或不是)。简单的情况是告诉Git将一个URL替换为另一个URL:
git config --global url."http://git.code.sf.net/p/tcpdf/code".insteadOf "git://git.code.sf.net/p/tcpdf/code"
但是你也可以告诉Git总是替换&#39; git://&#39;使用&#39; https://&#39;:
git config --global url."https://".insteadOf "git://"
在示例中,我将其放在用户的全局配置文件中,但您可以将--global
替换为--local
,以将其放入存储库的配置文件中(或{ {1}}将其放入系统的配置文件中。