Skip to content

Branchek kezelése

Endyl edited this page Aug 12, 2018 · 8 revisions

Alapok

Az alapvető struktúra leírása a Branching modell oldalon található. Ez az oldal a leggyakoribb esetekre vonatkozó példák gyűjtőhelye, szükség esetén nyugodtan bővíthető.

A példák tiszta working directoryra vonatkoznak, a különböző összeütközések megoldását itt egyelőre nem részletezzük.

git és git flow

Mivel a "successful" branching modellt próbáljuk követni, a branchek kezelésének megkönnyítésére használható a git flow nevű git "extension" gyűjtemény is. A telepítésére vonatkozó információk a projekt wikijében találhatóak. Ugyanakkor a branchek kezelése a hagyományos git parancsokkal is megoldható.

A git flow megfelelő beállítását (fő branch nevek és prefixek) elvégzi a git clone után futtatandó scripts/git-flow-setup.sh script.

Általános munkafolyamat

Issue megoldásának elkezdése

Ha egy fejlesztéssel járó issue hozzánk lett rendelve, első dolgunk, hogy a Branching modell oldalon leírtaknak megfelelő kiindulási branchről indítsunk egy branchet, az ott leírtaknak megfelelő névvel, ami az issuera vonatkozó változtatásokat fogja tartalmazni. Általában a develop branch lesz a kiindulási alap és onnan issue brancheket hozunk létre , így ebben a példában ez szerepel (példa issue: #123 - Foobar Implementáció).

$ git checkout develop
$ git checkout -b i-123-foobar-implementacio

Ha git flowt használunk, akkor csupán ennyi a dolgunk:

# az i- prefixet a git flow hozzáteszi a branch nevéhez
$ git flow feature start 123-foobar-implementacio

Issue-n végzett munka megosztása

Ha meg akarjuk osztani másokkal egy issue-n végzett munkánkat, akkor pusholni kell az origin remote-ra.

# ha az i-123-foobar-implementacio branchen vagyunk, első alkalommal
$ git push -u origin i-123-foobar-implementacio
# később
$ git push

Git flow esetén:

$ git flow feature publish 123-foobar-implementacio

Issue-n végzett munka folytatása, megtekintése

Ha másik branchre váltottunk és folytatni szeretnék a munkát, vagy valakinek az eddigi változtatásait szeretnénk megtekinteni (ilyenkor célszerű egy git fetch-et futtatni), akkor térjünk át a kívánt branchre:

$ git checkout i-123-foobar-implementacio

Git flow esetén:

$ git flow feature checkout 123-foobar-implementacio

Issue-n végzett munka befejezése

Mivel develop és master védett branchek, és csak pull request által merge-ölhető beléjük kód, a git flow erre vonatkozó parancsai (git flow [...] finish) nem használhatóak a különböző branchek lezárására, hanem a következők szerint kell eljárni:

Ha úgy gondoljuk, megoldottuk az issue-ban szerplő problémát, pusholjuk a még nem publikált módosításainkat, majd hozzunk létre egy pull requestet githubon. Fontos, hogy a merge célpontjául a megfelelő branchet válasszuk ki. Ebben az esetben ez a develop branch.

Ha a review során még módosításokra lesz szükség, commitoljuk és pusholjuk őket.

Ha a pull request merge-ölésre került, akkor töröljük a branchet.

Issue/branch típusától függő lépések

Feature vagy bugfix esetén a fenti folyamatban develop-ról leágazó és oda visszatérő issue branchet használunk, i-{issue-id}-{rovid-leiras} névvel. Git flow használata esetén a git flow feature start {issue-id}-{rovid-leiras}, git flow feature publish {issue-id}-{issue-leiras} és git flow feature checkout {issue-id}-{rovid-leiras} parancsokat használjuk.

Kísérleti branch esetén develop-ról, vagy másik issue branchről ágazunk le, e-{user}-{rovid-leiras} névvel. Ennek nincs git flow megfelelője. Ezeket a brancheket általában nem merge-öljük, hanem a belőlük szükséges változtatásokat pl. cherry-pick-kel átemeljük a megfelelő branchbe, majd a kísérleti branchet töröljük.

Release branch esetén develop-ról ágazunk le r-{verzio} névvel és a pull request céljának master-t állítjuk be. Git flow esetén használhatóak a git flow release start r-{verzio} és git flow release publish r-{verzio} parancsok.

A release branchen szükséges bugfixek elkészítéséhez az adott release branchről leágazó és oda visszatérő issue branchet használunk, i-{issue-id}-{rovid-leiras} névvel. Git flow használata esetén a git flow feature start {issue-id}-{rovid-leiras} <release branch neve>, git flow feature publish {issue-id}-{issue-leiras} és git flow feature checkout {issue-id}-{rovid-leiras} parancsokat használjuk.

Hotfix brancheken végezzük az éles verzión szükséges azonnali javításokat. Ezek master-ről ágaznak le, és oda térnek vissza, h-{issue-id}-{rovid-leiras} névvel. Git flow esetén a git flow hotfix start {issue-id}-{rovid-leiras} és git flow hotfix publish {issue-id}-{issue-leiras} parancsokat használjuk.