Przyjmijmy prostą strukturę aplikacji

  1. root
  2. - app
  3. - controller
  4. - model
  5. - etc
  6. - public
  7. - config
  8. - vendor
  9. - noisemc
  10. - image
  11. - sound
  12. - otherlib
  13. composer.json


Załóżmy, ze noisemc/image, noisemc/sound, noisemc/otherlib to osobne repo w GIT

Doszedłem już do tego jak dołączyć je do projektu za pomocą Composera:

  1. {
  2. "require" : {
  3. "noisemc/image" : "dev-master",
  4. "php" : ">=5.3.2"
  5. },
  6. "repositories" : [{
  7. "name" : "noisemc/image",
  8. "type" : "git",
  9. "url" : "https://noisemc.somegithosting.com/noisemc-image.git"
  10. }
  11. ]
  12. }


Teraz kwestia nierozwiązana jest taka, że chciałbym, żeby w różnych środowiskach zaciągał mi się inny branch z repo, tj np środowisko testowe zaciągałoby dev-test, środowisko produkcyjne dev-master

require-dev composera umożliwia jedynie zaciąganie dodatkowych zależności, a nie alternatywnych
source/dist umożliwia zaczytywanie różnych wersji, ale dist nie akceptuje git jako źródła, musi być np zip

Rozwiązanie na tą chwilę to dwa osobne pliki .json dla composera i w momencie kiedy następuje deployment na test czy produkcję Chef tworzy symlink w zależności od tego na jakim jesteśmy serwerze, np: ln -s composer/composer.master.json composer.json i wtedy wykonuje php composer.phar install

Rozwiązanie to według mnie jest nieładnym hackiem

Czy ktoś ma jakieś sugestie co do sposobu zarządzania takimi współdzielonymi bibliotekami? Do tej pory używaliśmy svn:externals i działa ale chcielibyśmy przesiąść się na GIT/Composer

PS. Chyba pomyliłem działy tongue.gif Poproszę o przeniesienie