„Mercurial“ filialų valdymas

Neseniai perjungiau iš SVN į Mercurial. Dabar man įdomu, kaip įgyvendinti savo numatomą šakotojo darbo srautą Mercurial pagal gerą praktiką, tikėdamasis, kad kiti kūrėjai supras, kas vyksta saugykloje.

Tai yra darbo eiga:

  • Paprastai turiu šaknies / numatytojo filialą, kuriame dirbau dabartinėje leidinių serijoje. Tarkime, tai yra 1.x. Tuo pačiu metu, naudoju filialą 2.x, kad galėčiau dirbti kitame pagrindiniame leidinyje. Šio filialo pokyčiai gali būti radikalūs, todėl čia nėra prasmės susiliejimas su filialo / numatytojo / 1.x filialu.
    • Po kurio laiko gali būti baigtas darbas 2.x, o versija 2.0 bus išleista. Dabar noriu, kad 2x filialas būtų naujasis numatytasis / magistralinis filialas, o dabartinė numatytoji / magistralinė linija yra 1.x filialas.
    • Pakartojant šį procesą gali pasirodyti naujas 3.x filialas. Kaip ir anksčiau, jei 3.0 yra išleista, 3.x turėtų tapti nauju numatytuoju filialu, o dabartinis numatytasis turėtų tapti 2.x (vėl).

Mano klausimas yra ne tai, ar šis darbo srautas yra geras (manau, kad tai nėra iš esmės neteisinga). Mano klausimai yra susiję su tuo, ar galiu tai įgyvendinti „Mercurial“, kaip geros praktikos pavyzdžiu, arba ar yra geresnių galimybių.

Taigi, taip aš planuoju valdyti filialus Mercurial ...

Pradedant nuo vieno filialo saugyklos, kurioje yra dabartinės 1.x leidimų serijos kodas:

 $ hg init $ echo "hello world" > file1.txt $ hg ci -A -m "Initial commit of 1.x code" 

Pradėkite nuo 2.x versijos:

 $ hg branch 2.x $ hg ci -m "Create new branch for 2.x development" $ echo "Big new feature for 2.x" > file2.txt $ hg ci -A -m "Add big new feature" 

Tuo tarpu atlikite dabartinės serijos leidinius (1.x):

 $ hg up default $ echo "Minor adjustments specific for 1.x" > file3.txt $ hg ci -A -m "Minor adjustments" 

Po kurio laiko, pasirodymas 2.0 yra parengtas, yippee! Nustatykite numatytąją šaką į 1.x ir 2.x pagal nutylėjimą:

 $ hg up default $ hg branch 1.x $ hg ci -m "Make default branch to 1.x branch" $ hg up 2.x $ hg ci --close-branch -m "Close branch 2.x" $ hg branch --force default $ hg ci -m "Make former 2.x branch to new default" 

Dabar sukursime naują 3.x filialą ir dirbame jame, taip pat dirbame pagal nutylėjimą. Vėlgi, po tam tikro laiko 3.0 yra pasirengęs, ir vėl reikia valdyti filialų pavadinimus:

 $ hg up default $ hg branch --force 2.x # (reuse previously closed 2.x branch name) $ hg ci -m "Make default branch to 2.x branch" $ hg up 3.x $ hg ci --close-branch -m "Close branch 3.x" $ hg branch --force default $ hg ci -m "Make former 3.x branch to new default" 

Dabar repo gali atrodyti taip („o“ yra galva):

 o Branch default (3.x) | | o Branch 2.x \| | o Branch 1.x \| | . 

Svarbiausia yra tai, kad nesu įsitikinęs, kad jei jūs pakartotinai panaudosite filialų pavadinimus ir žongliruosite su numatytojo filialo pavadinimu, tai yra gera praktika.

Daug šio teksto teksto - atsiprašau, bet norėjau aiškiai pasakyti, ką darau.

46
10 сент. Obeno Sonne nustatė rugsėjo 10 d 2009-09-10 17:28 '09, 17:28, 2009-09-10 17:28
@ 2 atsakymai

Štai ką norėčiau daryti:

Padarykite default „pagrindinės linijos“ šaką. Šio siūlelio galas yra versija, kuri šiuo metu skelbiama visuomenei. Kritiniai pataisymai gali būti tiesiogiai perkelti į šią temą ir sujungti į vystymosi šakas.

Norėdami pradėti nuo 2.0 versijos, sukurkite filialą 2.0-dev . Įtraukite pakeitimus, susijusius su 2.0 šioje temoje, ir sujungkite kritinius pataisymus iš pagrindinės linijos ( default ). Kai baigsite 2.0, sujunkite 2.0-dev į default ir pažymėkite rezultatą kaip 2.0 .

Tokiu būdu verslas reiškia, kad nereikia nerimauti dėl žongliravimo šakų pavadinimų, ir jūs galite lengvai sujungti kritinius pataisymus su pagrindine linija vystymosi filialuose.

Jis taip pat gerai matuojamas, kai dirbate su keliomis būsimomis versijomis tuo pačiu metu (pvz., 2.1 ir 3.0). Galite periodiškai sujungti pakeitimus nuo 2,1 iki 3,0, kad išlaikytumėte dabartinę vertę 3,0.

Dėl to gaunate tokį tvarkaraštį:

 $ hg glog -l 1000 @ changeset: 25:efc0096f47c0 tip | summary: Added tag 3.0 for changeset d1a7fc3d7d77 | o changeset: 24:d1a7fc3d7d77 3.0 |\ summary: Merge in the redesign changes. | | | o changeset: 23:b5b69d24c8f7 3.0-dev | | summary: Finish 3.0 redesign. | | | o changeset: 22:4c2f98fac54b 3.0-dev |/| summary: Merge in the latest changes to 2.1/mainline. | | o | changeset: 21:37df04521032 | | summary: Added tag 2.1 for changeset 39ecc520fc0a | | o | changeset: 20:39ecc520fc0a 2.1 |\ \ summary: 2.1 development is done. | | | | o | changeset: 19:208f3f9236af 2.1-dev | | | summary: Finish the 2.1 work. | | | | | o changeset: 18:4a024009a9d6 3.0-dev | | | summary: More redesign work. | | | | | o changeset: 17:00c416888c25 3.0-dev | |/| summary: Merge in changes from the 2.1 branch to keep the redesign current. | | | | o | changeset: 16:a57e781a0db1 2.1-dev | | | summary: More 2.1 work. | | | | | o changeset: 15:ddeb65402a61 3.0-dev | | | summary: More redesign work. | | | +---o changeset: 14:90f5d7a8af9a 3.0-dev | | | summary: Merge in the fire fixes. | | | | o | changeset: 13:78a949b67bb9 2.1-dev |/| | summary: Merge in the fire fixes. | | | o | | changeset: 12:6dfe9d856202 | | | summary: Oh no everything is on fire, fix it in the mainline. | | | | o | changeset: 11:86767671dcdb 2.1-dev | | | summary: Smaller changes for 2.1. | | | | | o changeset: 10:25dec81d2546 3.0-dev | | | summary: Work more on the redesign. | | | +---o changeset: 9:42c7d689fb24 3.0-dev | | summary: Start working on a complete redesign. | | | o changeset: 8:3da99186ca7d 2.1-dev |/ summary: Start working on 2.1. | o changeset: 7:9ba79361827d | summary: Added tag 2.0 for changeset 755ed5c5e291 | o changeset: 6:755ed5c5e291 2.0 |\ summary: Merge in the dev branch for 2.0. | | | o changeset: 5:44a833fcc838 2.0-dev | | summary: Finish work on 2.0. | | | o changeset: 4:d7ba6aae1651 2.0-dev |/| summary: Merge in the critical fix. | | o | changeset: 3:968049f1b33a | | summary: Fix a critical bug on the main branch. | | | o changeset: 2:917869609b25 2.0-dev | | summary: More work on the new version. | | | o changeset: 1:f95798b9cb2e 2.0-dev |/ summary: Start working on version 2.0. | o changeset: 0:8a3fb044d3f4 summary: Initial commit. 
47
10 сент. Atsakymą pateikė Steve Losh 10 rugsėjis 2009-09-10 21:23 '09 9:23 PM 2009-09-10 21:23

Manau, kad turėtumėte galvoti apie tai: sėkmingas „git“ šakos modelis .

Aš nesu didelis gito gerbėjas, tačiau šis modelis taip pat naudingas gyvsidabriui.

2
28 окт. Alex Povar atsakymas, pateiktas spalio 28 d 2013-10-28 17:41 '13, 17:41, 2013-10-28 17:41

Žr. Kitus klausimus, susijusius su arba Užduoti klausimą