197

これは私composer.jsonのです。GithubでNodgeのlessphpプロジェクトのフォークを使用したいと思います。

 "repositories": [{
    "type": "package",
    "package": {
        "version": "dev-master",
        "name": "nodge/lessphp",
        "source": {
            "url": "https://github.com/Nodge/lessphp.git",
            "type": "git",
            "reference": "master"
        },
        "autoload": {
            "classmap": ["lessc.inc.php"]
        }
    }
}],
"require": {
    "php": ">=5.3.3",
    "nodge/lessphp": "dev-master"
},

しかし、実行するとこのエラーが発生しますcomposer update

nodge /lessphpdev-master->一致するパッケージが見つかりません。

このフォークを正しく要求する方法がわかりません。

4

8 に答える 8

264

それを行う最も一般的な(そして最も簡単な)方法は、VCSリポジトリを使用することです。

フォークをリポジトリとして追加し、バージョン制約を更新してカスタムブランチを指すようにするだけです。カスタムブランチ名の前には。を付ける必要dev-があります。

monolog / monologをフォークし、 bugfixというブランチを作成したとすると、composer.jsonは次のように更新されます。

{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/igorw/monolog"
        }
    ],
    "require": {
        "monolog/monolog": "dev-bugfix"
    }
}

バグ修正ブランチを指定する場合を除いて、requireステートメントを変更しないことに注意してください。個人用フォーク( )ではなく、引き続きアップストリームパッケージ()を参照しmonolog/monolog、ブランチ名のプレフィックスは。です。あなたはドキュメントで詳細を読むことができますigorw/monologdev-

于 2012-11-21T19:29:34.520 に答える
50

VCSの使用は機能します:

"name": "test/test",
"repositories": [{
    "type": "vcs",
    "url": "http://github.com/Nodge/lessphp"
}],
"require": {
    "leafo/lessphp": "dev-master"
},

しかし、これを備えたモジュールが必要な場合composer.json、それは機能しません。フォークではなく、元のプロジェクトをインストールします。

"name": "example/example",
"require": {
    "test/test": "dev-master"
},

リポジトリについてもう一度言及する必要があります。それは正常ですか?

于 2012-11-22T08:49:56.193 に答える
42

@Neilimeの回答が得られない場合は、フォークが別のブランチを使用していることを確認してください。

たとえば、変更をフォークのブランチにプッシュします。ブランチ名にはプレフィックスをmy-bugfix追加しませんdev-が、composer.jsonにプレフィックスを追加する必要があります。コンポーザーファイルは次のようになります。

"repositories":
[
    {
        "type": "vcs",
        "url": "http://github.com/yourname/packageName"
    }
],
"require": {
    "owner/packageName": "dev-my-bugfix"
},
于 2015-02-12T14:39:07.963 に答える
16

私は多くのオプションを試しましたが、この投稿を受け取った後、私は光を見て、それは完璧に機能しました。

これはあなたがしなければならないことです:

1-フォークリポジトリ

2-ブランチを作成し、必要な変更を加えます。

3-リポジトリラベルをcomposer.jsonに追加します

"repositories": [
     
        {
            "type": "vcs",
            "url": "https://github.com/user/yourforkname"
        }
    ]

4-プロジェクト内のコマンドラインで、次のようなフォークが必要です。

composer require vendor/packagename:dev-branchname

そしてVoilá!!

フォークバージョンが機能しています

于 2018-05-13T14:38:53.570 に答える
7

Composerのドキュメント http://getcomposer.org/doc/05-repositories.md#vcsによると、(フォークではなく)元のリポジトリを(このrequire場合は「nodge / lessphp」)で指定するだけで十分です。その後、Composerはあなたのフォークをインストールします(ベンダーのコードを見てください)

于 2013-01-15T13:26:59.493 に答える
5

つまり、これは2019年であり、ここでの回答のほとんどはすでに正しいものです。

ただし、(作成した)フォークの特定のブランチが必要な状況では、コンポーザーに使用可能なバージョン/タグを最初にリストしてもらいます。これは私に多くの時間を節約しました。

spatie/laravel-backupパッケージの完全な例。

まず、repositoriescomposer.jsonにキーを追加します。あなたのフォークのURLで

"repositories": [{
   "type": "vcs",
   "url": "https://github.com/holymp2006/laravel-backup"
 }]

利用可能なバージョン/タグを取得する

composer show "spatie/laravel-backup" --all

versionsターミナル出力で必要なバージョンを選択し、そのバージョンを要求します

composer require spatie/laravel-backup:v5.x-dev
于 2019-08-08T07:50:05.983 に答える
2

私は通常、パッケージ定義に「dist」ノードを追加します。私はそれをこのように使うことに問題はありませんでした。

しかし、これ以上の説明のために、このトリックをどこから得たのか思い出せません。

{
    "repositories": [
        {
            "type": "package",
            "package": {
                "version": "dev-master",
                "name": "nodge/lessphp",
                "source": {
                    "url": "https://github.com/Nodge/lessphp.git",
                    "type": "git",
                    "reference": "master"
                },
                "autoload": {
                    "classmap": ["lessc.inc.php"]
                },
                "dist": {
                    "url": "https://github.com/Nodge/lessphp/archive/master.zip",
                    "type": "zip"
                }
            }
        }
    ],
    "require": {
        "nodge/lessphp": "*"
    }
}
于 2016-02-20T12:10:18.923 に答える
0

私が元を持っていたとき、受け入れられた答えと明確な答えはすべて私にとってうまくいきました。私がフォークして変更した依存関係を必要とするアプリケーション。この場合でも、受け入れられた回答を使用します。

ただし、Packagistで配布したいパッケージがあり、そのパッケージにはフォークされて変更された依存関係も含まれているため、このアプローチは機能しなくなりました。

誰かがこの設定でインストールしようとしても、同じ -> no matching package found.エラーメッセージが表示されます。

この回答リンクされたComposerのドキュメントは、リポジトリ設定がトップレベルである必要があることを示唆していますcomposer.json。つまり、このパッケージをインストールする人は、その構成をcomposer.jsonファイルにも追加する必要があります。これにより、インストールプロセスに多くの不必要な混乱が生じます。

代わりに、私は自分のフォークをPackagistに公開しました。私の理解では、フォークは眉をひそめていますが、この新しいパッケージに使用しているので、これは維持されたフォークと見なされます。

配布したいパッケージやライブラリでこの問題が発生した場合に役立つことを願っています。

于 2020-11-14T01:46:44.543 に答える