¿Cómo se realiza clon superficial con Composer?

Tengo el siguiente 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" } } } ] } 

Sin embargo cuando corro:

 $ 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 

el process de clonación lleva mucho time y el repository crece más de 25 MB de tamaño:

 $ 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/ 

Entonces el compositor se detiene con el time de espera:

[Symfony \ Component \ Process \ Exception \ ProcessTimedOutException]
El process " 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 "superó el time de espera de 300 segundos.

Supongo que el repository es demasiado grande para clonar todos los objects de git.


¿Cómo puedo clonar el repository más rápido usando un clon superficial ?

Por ejemplo, pasando los --depth 1 extra – --depth 1 o – --single-branch git en el command Git, para que pueda ser recogido automáticamente por Composer.

Espero que el cambio sea independiente dentro del file composer.json , por lo que no se requerirá ninguna configuration externa cuando se invoque este file en los otros sistemas o por otros usuarios al ejecutar la composer install .

La clonación superficial con Composer no es oficialmente compatible (sin parches) ya que los parameters de git están codificados.

Ya hay una request de function para agregar esto: Agregar soporte para clones de git shallow . Sin embargo, la implementación de esta function puede causar algunos problemas (como no alcanzar los commits bloqueados si la profundidad no es tan alta @stof y otros).

Además, hay una request de extracción que intenta implementar clones poco profundos al agregar un --git-clone-depth adicional --git-clone-depth (las testings muestran algunos buenos resultados). Sin embargo, el cambio se ha abandonado debido a los clones de git más rápidos que usan caching .


Para el hack rápido, es posible editar los parameters de git en doDownload() en src/Composer/Downloader/GitDownloader.php , por ejemplo, cambiando --depth 1 --single-branch en esta línea:

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

O encuentre la forma de aplicar la configuration de profundidad 1 en git config.


La solución más fácil (sin ningún truco) para repositorys más grandes es simplemente boost el time de espera especificando la variable como:

 COMPOSER_PROCESS_TIMEOUT=0 composer install