如何强制Composer使用https://而不是git://?

时间:2013-09-05 13:59:17

标签: php git github composer-php

我有类似的东西

"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://,但为什么这不受尊重?

2 个答案:

答案 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}}将其放入系统的配置文件中。