(toiminnot)

hwechtla-tl: Git ja muutosalgebra

Kierre.png

Mikä on WikiWiki?
nettipäiväkirja
koko wiki (etsi)
viime muutokset


(nettipäiväkirja 04.12.2012) Joudun opettelemaan gitin käyttöä. Myönnän, että minulla on asennevammakin sen suhteen, mutta jotenkin ärsyttää, kun ne esittelevät gitin ominaisuuksia jotenkin edistyksellisinä. Gitissä on kaksi merge-tapaa, CVS:n ajoilta periytyvä 3-way merge (jolle tiedetään paljon tapauksia, jossa on mahdotonta löytää järkevää merge basea; ks. esim. http://www.gelato.unsw.edu.au/archives/git/0504/2279.html) sekä loistava uusi rebase, joka tekee eri brancheissa oleville muutoksille käytännössä samaa kuin darcs eli linearisoi ne yhdeksi historiaksi. Nimi "rebase" tulee siitä, että muutokset pysyvät samoina mutta siirretään uuteen kontekstiin, toisten muutosten päälle.

Hyvä, git osaa tehdä mergejä samaan tapaan kuin darcs. Paitsi että: toisiin repositoryihin siirrettyjä muutoksia ei voi yhdistellä rebasella, koska niistä tulee rebasen jälkeen uusia muutoksia, ja ihmisille on haittaa molempien muutosten saamisesta. Darcs selviää tästä tilanteesta sillä, että muutoksella on identiteetti (tunniste), jonka perusteella darcs tietää sen samaksi muutokseksi, vaikka se olisikin kommutoitu eri kontekstiin (darcsin perustoimintoja on patchien järjestyksen muuttelu siten, että lopputulos pysyy samana). Git ei voi tehdä näin, koska se ei seuraa muutoksia vaan muutosten lopputuloksia, ja rebasen jälkeen muutos on eri muutos, koska siitä on eri lopputulos.

Toinen järjestelmä, jolla on vaikeuksia muutosten yhdistelyssä mielivaltaisessa järjestyksessä, on GNU arch. Arch kylläkin käsittelee muutoksia muutoksina, mutta ei takaa, että muutokset tuottavat saman lopputuloksen tultuaan yhdistellyiksi eri järjestyksissä. Niinpä jokainen muutosten yhdistelmä vaatii oman merge patchinsa, jotka sitten voivat taas olla konfliktissa.


kommentoi (viimeksi muutettu 29.07.2014 00:23)