10

私はこのようなものを持っています

"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://URL で指定したのに、これが尊重されないのはなぜですか?

4

2 に答える 2

7

このgithub-protocolsオプションは GitHub でのみ機能しますが、Git サーバーに GitHub を使用することに依存しない問題を解決する別の方法があります。

Composer に別の URL を使用するように指示するだけです。これは、パッケージをフォークした場合と同じように、Composer がデフォルト パッケージの代わりにフォークを使用するようにしたい場合と同じです。

http以下は、あるパッケージに独自のフォークを使用し、別のパッケージではなくURL のプロトコルを強制する例ですgit

"repositories": [{
    "type": "vcs",
    "url": "https://github.com/brandondrew/laravel4-PHPExcel"
},{
    "type": "vcs",
    "url": "http://git.code.sf.net/p/tcpdf/code"
}],

Laravel4-PHPExcel の場合、早い段階でバグを修正しており、メンテナーがプル リクエストを受け入れるのを待っている間に修正が必要でした。(余談ですが、彼はその後、彼のコードに多くの改良を加えたので、フォークの使用をやめましたが、私のコードが役に立たなくなったとしても、例として役立つので、ここに示します。実際には。)

TCPDF の場合、アプリが使用する Git プロトコルを指定する唯一のパッケージであるため、代わりに HTTP を使用できるのに、クライアントの場所のセキュリティ チームにポート 9418 を開くよう懇願し、懇願するのはばかげているように思えました。 (私の意見では)彼らは最初から使っていたはずです。URL を変更したのは に置き換えgithttpだけですが、他のユーザー指定の URL と同じように機能し、Composer が特定のパッケージに使用する URL を指定できます。


更新

完全にするために、Gitレベルでも問題を解決できることを言及する必要があると思います。この問題に直面したアプリの場合、Composer で実行する方が適切だと感じましたが、状況は異なる場合があり、状況に対する最善のアプローチについての見解も異なる場合があります。

Git アプローチは、よりグローバルにすることができます。これは、利点と見なされる場合もあれば、そうでない場合もあります。簡単なケースは、ある URL を別の URL に置き換えるように Git に指示することです。

git config --global url."http://git.code.sf.net/p/tcpdf/code".insteadOf "git://git.code.sf.net/p/tcpdf/code"

ただし、「git://」を常に「https://」に置き換えるように Git に指示することもできます。

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

例では、ユーザーのグローバル構成ファイルに入れましたが、 に置き換え--global--local、リポジトリの構成ファイルに入れる (または--systemシステムの構成ファイルに入れる) ことができます。

于 2014-06-24T17:16:13.373 に答える