10

我有这样的东西

"repositories": [
    {
        "type": "package",
        "package": {
            "name": "myrepo",
            "version": "dev-master",
            "source": {
                "url": "https://github.com/me/myrepo.git",
                "type": "git",
                "reference": "master"
            }
        }
    },

但是当 Composer 拉取 repo 时,遥控器 (origincomposer).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://在 URL 中指定了,但为什么不尊重?

4

2 回答 2

21

您可以使用以下命令更改用于 github 的协议:

composer config --global github-protocols https

然后重新安装供应商应该做你想做的事。

于 2013-09-05T14:17:40.680 回答
7

github-protocols选项仅适用于 GitHub,但还有另一种解决问题的方法,它不依赖于将 GitHub 用于您的 Git 服务器。

您只需告诉 Composer 使用不同的 URL,就像您分叉一个包并且您想确保 Composer 使用您的分叉而不是默认包时一样。

这是一个示例,我将自己的 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 的情况下,我很早就修复了一个错误,并且在等待维护者接受我的拉取请求时需要我的修复。(顺便说一句,他已经对他的代码进行了大量改进,所以我放弃使用我的 fork,但我在这里展示它,因为它作为示例很有用,即使我的代码不再有用在实践中。)

在 TCPDF 的情况下,它们是我的应用程序使用的唯一指定 Git 协议的包,所以当我可以使用 HTTP 代替时,恳求并恳求我客户端的安全团队打开端口 9418 似乎很荒谬, (在我看来)他们应该从哪个开始。我在 URL 中所做的所有更改都是用 替换githttp但它的工作方式与任何其他用户指定的 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 总是将 'git://' 替换为 'https://':

git config --global url."https://".insteadOf "git://"

在示例中,我将其放在用户的全局配置文件中,但您可以替换--global--local将其放入存储库的配置文件中(或--system将其放入系统的配置文件中)。

于 2014-06-24T17:16:13.373 回答