2

私は次のものを持っていますcomposer.json

{
    "require": {
        "php": ">=5.2.0",
        "queueit/KnownUser.V3.PHP": "dev-master"
    },
    "config": {
        "autoloader-suffix": "ComposerManager",
        "vendor-dir": "../../../all/libraries/composer"
    },
    "prefer-stable": true,
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "queueit/KnownUser.V3.PHP",
                "version": "dev-master",
                "source": {
                    "type": "git",
                    "url": "https://github.com/queueit/KnownUser.V3.PHP.git",
                    "reference": "master"
                }
            }
        }
    ]
}

しかし、私が実行すると:

$ composer -vvv update
...
Cloning master
Executing command (CWD): git clone --no-checkout 'https://github.com/queueit/KnownUser.V3.PHP.git' '.../sites/all/libraries/composer/queueit/KnownUser.V3.PHP' && cd '.../sites/all/libraries/composer/queueit/KnownUser.V3.PHP' && git remote add composer 'https://github.com/queueit/KnownUser.V3.PHP.git' && git fetch composer

クローン作成プロセスには非常に長い時間がかかり、リポジトリのサイズが 25 MB を超えます。

$ du -hs ~/.composer/cache/vcs/https---github.com-queueit-KnownUser.V3.PHP.git/
25M ~/.composer/cache/vcs/https---github.com-queueit-KnownUser.V3.PHP.git/

次に、Composer はタイムアウトで停止します。

[Symfony\Component\Process\Exception\ProcessTimedOutException]
プロセス " git clone --no-checkout 'https://github.com/queueit/KnownUser.V3.PHP.git' '.../sites/all/libraries/composer/queueit/KnownUser.V3.PHP' && cd '.../sites/all/libraries/composer/queueit/KnownUser.V3.PHP' && git remote add composer 'https://github.com/queueit/KnownUser.V3.PHP.git' && git fetch composer" が 300 秒のタイムアウトを超えました。

リポジトリが大きすぎて、すべての git オブジェクトを複製できないと思います。


浅いクローンを使用してリポジトリをより迅速にクローンするにはどうすればよいですか?

たとえば、余分なパラメーター--depth 1または--single-branchgit パラメーターを Git コマンドに渡すと、Composer によって自動的に取得されますか?

変更はファイル内で自己完結していると予想されるcomposer.jsonため、他のシステムでこのファイルを呼び出したとき、または実行時に他のユーザーがこのファイルを呼び出したときに、外部構成は必要ありませんcomposer install

4

1 に答える 1

5

Composerを使用した浅いクローン作成は、 gitパラメーターがハードコーディングされているため、(パッチ適用なしで) 公式にはサポートされていません。

これを追加する機能リクエストが既にあります: git 浅いクローンのサポートを追加します。ただし、この機能を実装すると、 @stofなどの深さがそれほど高くない場合にロックされたコミットに到達しないなど、いくつかの問題が発生する可能性があります。

さらに、追加のパラメーターを追加して浅いクローンを実装しようとするプル リクエスト--git-clone-depthがあります (テストではいくつかの良好な結果が示されています)。ただし、 cache を使用した git clone の高速化により、変更は放棄されました。


簡単なハックとして、たとえば次の行を変更することdoDownload()で、の git パラメータを編集できます。src/Composer/Downloader/GitDownloader.php--depth 1 --single-branch

$command = 'git clone --no-checkout ...'

または、深さ 1 の設定を git config に適用する方法を見つけてください。


より大きなリポジトリの場合の最も簡単な回避策 (ハッキングなし) は、次のような変数を指定してタイムアウトを増やすことです。

COMPOSER_PROCESS_TIMEOUT=0 composer install
于 2017-11-17T12:57:13.230 に答える