Git a composer a pararelní vývoj Addonů

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
LeonardoCA
Člen | 296
+
0
-

Nemám skoro žádnou praktickou zkušenost s composerem, proto se chci zeptat, dá-li se smysluplně zapojit do následujícího workflow.

Má představa je vyvíjet veškeré univerzálnější moduly jako Nette/Addony, s tím že budou po dobu několika měsíců v rozpracovaném stádiu, zároveň testované i laděné v několika starších a nových projektech. Na něčem budu pracovat sám, na něčem bude pracovat více lidí

Struktůra zhruba následující:

  • OldProject1
    • AddOn1
    • AddOn4
    • AddOn5
  • OldProject2
    • AddOn1
    • AddOn2
    • AddOn4
  • NewProject1
    • AddOn2
    • AddOn3
  • NewProject2
    • AddOn1
    • AddOn2
    • AddOn3
    • AddOn4
    • AddOn5
  • NewProject3
    • AddOn1
    • AddOn3
    • AddOn4
    • AddOn5
  • AddOn1
  • AddOn2
  • AddOn3
  • AddOn4
  • AddOn5
  • SandboxAddOn1
    • AddOn1
  • SandboxAddOn2
    • AddOn2
  • SandboxAddOn3
    • AddOn3
    • (AddOn1, AddOn2)
  • SandboxAddOn4
    • AddOn4
  • SandboxAddOn5
    • AddOn5
    • (AddOn1, AddOn2, AddOn3) // volitelně závíslé addony

Chci to řešit pomocí Git submodulů. Hodí se i v této fázi používat composer s git repository? Zvlášťe když ze začátku je předpoklad commitů/updatů jednoho addonu několikrát denně?

Filip Procházka
Moderator | 4668
+
0
-

Tak si nastavíš závisloti na @dev verzi toho balíčku a vždy zavoláš $ composer update.

Issue, která by tě mohla zajímat: https://github.com/…r/issues/601

Editoval HosipLan (11. 8. 2012 12:48)

LeonardoCA
Člen | 296
+
0
-

Hosiplan: dík za tip.

Co mě ještě zajímá composer update tak updatuje automaticky všechny balíčky? A dá se specifikovat, že chci updatovat třeba jen jeden balíček? A některý zrovna nechci updatovat? Nebo takový případ budu řešit gitem?

Chápu to správně, že tedy commitovat změny budu přes git a updatovat budu přes composer? Můžu to libovolně kombinovat? Nerozhodí to git?

Tyhle souvislosti mi ještě nejsou úplně jasné …

V tom issue na které odkazuješ navíc píšeš, že používání git submodules bylo annoying – mohl bys rozvést důvody? Doladil sis nějak raději řešení se symlinky?

Zvažuju ještě možnost, vykašlat se v tomto stádiu na composer a řešit vše raději přes git, ale nevím co bude lepší …

Editoval LeonardoCA (11. 8. 2012 16:32)

Filip Procházka
Moderator | 4668
+
0
-

Já to teď řeším tak, že když vyvíjím, tak dám jednou $ composer update, smažu ty složky u projektů, které vyvíjím taky a pak místo nich udělám symlinky. Samozřejmě si musím dávat bacha a nesmím zavolat update, když tam mám ty symlinky. Ale zase nemusím nic řešit, prostě je všechno realtime.

Je to v pohodě použitelné, protože závislosti si nastavíš jednou a pak programuješ třeba týdny, než potřebuješ zase něco měnit v nastavení závislostí.

Kdybych zavolal update nad tím repozitářem, tak ono to většinou nic neudělá. Composer se snaží nenechat tě zmršit ty repozitáře, ale je to dost „vratké“. Prostě to chce ty linky.

Ale na to linkování se chystám. Jen to prostě není priorita číslo jedna.

Co mě ještě zajímá composer update tak updatuje automaticky všechny balíčky? A dá se specifikovat, že chci updatovat třeba jen jeden balíček? A některý zrovna nechci updatovat? Nebo takový případ budu řešit gitem?

$ composer update ti prostě aktualizuje v tom aktuálním projektu závislosti. Prostě tam natahá ty nejnovější, jaké mu povolíš.

Git submoduly jsou hrozně bolestivé a složité. Fakt je nedoporučuju. Composer je na úplně jiné úrovni inteligence, použitelnosti i možností jak s tím kouzlit.

LeonardoCA
Člen | 296
+
0
-

Chápu pro jednotlivce s více projekty, které si sám udržuje je by to se symlinky bylo v pohodě řešení. Akorát s tím že na dvou projektech budou další minimálně 3 programátoři, tak to musí jít přes git.

Vždy je riziko, že úprava addonu rozbije něco v jiném projektu a tam zrovna nebude čas a chuť to hned řešit…

Budu si muset ještě něco vygooglit k těm submodulům, proč s tím jsou problémy.

Ještě mě napadá řešení adresář addonů úplně ignorovat v hlavním git repozitáři a mít v něm v podadresářích několik samostatných git repozitářů, které by se comittovaly zcela nezávisle. A balíčky pro composer by se dělaly až pro release verze addonů a release verze celé aplikace by se už i na staging řešila jen přes composer a odpovídající verze addonů…

Co si myslíš o takovém řešení? Pro vývoj několik nezávislých projektů ve společné adresářové struktůře. Pro deployment by se pomocí composeru spojily do jednoho projektu…

LeonardoCA
Člen | 296
+
0
-

Vypadá to, že k podobnému řešení došli i tady:
http://blog.appfog.com/…-submodules/
a důvody proč nepoužívat submodules jsem našel hned:
http://ayende.com/…t-submodules
editováno:
a ještě jeden článek k tématu:
http://codingkilledthecat.wordpress.com/…-submodules/
ani řešení googlu s Repo pro Android se mi moc nelíbí, takže pro směr jsem se už rozhodl, teď to jen vyzkoušet a vyladit…

Editoval LeonardoCA (11. 8. 2012 20:15)

Filip Procházka
Moderator | 4668
+
0
-

Předně ti raději zdůrazním jednu důležitou věc. Composer umí pracovat čistě nad git repozitáři. Ty mu řekneš, že chceš vývojovou verzi a on ti při každém $ composer update stáhne nové commity. Tohle je úplně v pohodě funkční řešení.

Ještě mě napadá řešení adresář addonů úplně ignorovat v hlavním git repozitáři a mít v něm v podadresářích několik samostatných git repozitářů, které by se comittovaly zcela nezávisle. A balíčky pro composer by se dělaly až pro release verze addonů a release verze celé aplikace by se už i na staging řešila jen přes composer a odpovídající verze addonů…

Adresář s knihovnami, které instaluje composer nesmíš commitovat do projektu! To jsou oddělené projekty a composer je skládá dohromady. Ty musíš mít složku vendors v .gitignore.

Balíčkem se chápe jakákoliv aplikace, knihovna, nebo rozšíření. Tebe jediné co zajímá, tak na jaké verzi běžíš. Můžete mít v pohodě několik samostatných repozitářů, commitovat do nich a vždy spustit jenom $ composer update.

LeonardoCA
Člen | 296
+
0
-

Adresář vendors bude v .gitgnore, to je jasné.

Poslední věc co ještě není jasné, budu mít addony/adresáře stažené composerem s dev verze mohu je potom normálně jednotlivě commitovat do gitu?

Tedy když bude ve vendors např:

vendors\Lxo\Application\UI\Bootstrap
vendors\Lxo\Application\UI\Datatables

Budou tyto adresáře obsahovat jen aktuální verzi addonu nebo kompletní git repozitář Addonu aby se s tím dalo dál pracovat? Takto by mi to pro vývoj dávalo smysl…

Editoval LeonardoCA (11. 8. 2012 21:06)

Filip Procházka
Moderator | 4668
+
0
-

Pokud pracuješ s development verzí balíčku, která je verzována v gitu, tak ano. Composer ti naklonuje kompletní repozitář. Když pak dáš update, pullne změny a checkoutne co po něm chceš.

LeonardoCA
Člen | 296
+
0
-

super, díky za konzultaci :) takto si myslím to bude přesně splňovat mou představu

bazo
Člen | 620
+
0
-

LeonardoCA napsal(a):

Hosiplan: dík za tip.

Co mě ještě zajímá composer update tak updatuje automaticky všechny balíčky? A dá se specifikovat, že chci updatovat třeba jen jeden balíček? A některý zrovna nechci updatovat? Nebo takový případ budu řešit gitem?

update jedneho balicka: composer update vendor/balicek

gawan
Člen | 110
+
0
-

Rád by som sa opýtal ako správne robiť (alebo ako vy robíte) deploy s git a composerom. @HosipLan písal, že externé knižnice sa nesmú commitovať do hlavného projektu.

Potom ale pri deploy na production musím zavolať composer update a čo ak niektorý z externých zdrojov je off (už sa to stalo aj s githubom) alebo nejaký „profík“ zmaže nejaký commit tag, lebo tam našiel hotfix (nebudem radšej menovať ;-) a jednoducho mi na production z akéhokoľvek dôvodu nezbehne composer update a zhodím production, čo potom?

Preto sa mi zdá bezpečnejšie mať všetky externé knižnice natvrdo skopírované v hlavnom projekte a pri deploy to nikdy nemôže zlyhať. Ako to riešite?

bazo
Člen | 620
+
0
-

ja to riesim tak, ze sa commituje len composer.lock a na serveri vzdy zavolam composer install. este sa mi nestalo, ze by niekto nieco vymazal, alebo bol github off.

a ak nahodou, tak stara verzia je zachovana a vzdy sa da instalovat balicky aj po jednom

Filip Procházka
Moderator | 4668
+
0
-

Nejenom ty to tak řešíš. Doporučuje to tak dokumentace Composeru. Vždy commitnout pouze composer.lock a composer pak nainstaluje ty správné verze.

bazo
Člen | 620
+
0
-

commitovat aj vendor dir len v pripade, ze nie je shell access.

Filip Procházka
Moderator | 4668
+
0
-

V žádném případě necommitovat adresář vendors. To to tam raději nahrát i s ním, ale v žádném případě necommitovat.

bazo
Člen | 620
+
0
-

no tak som to myslel, ale niekde nemas na vyber, taky phpfog napriklad

Filip Procházka
Moderator | 4668
+
0
-

PhpFog už několik dní/týdnů oficiálně podporuje composer ;)

bazo
Člen | 620
+
0
-

to je super. ale aj tak ich asi nezacnem pouzivat. uz som upisal svoju dusu pagodaboxu :)