Olen hiljalleen siirtynyt henkilökohtaisessa käytössä kokonaan Subversionista Gitiin. Aloitan nykyään kaikki uudet projektit Gitillä ja käytän Subversionia lähinnä yhteistyökumppaneiden kanssa toimiessa.

Huonoja kokemuksia Subversionista: Otimme eräässä projektissa käyttöön automaattiset branchit ja merget. Subversion 1.5 osaa pitää kirjaa brancheista mergeinfo-propertyn avulla. Se siis muistaa, mistä kohdasta branch aloitettiin, ja mitä osuuksia siitä on mergetetty takaisin trunkkiin.

Valitettavasti tämä on silti kovin työlästä. Kehittäjän täytyy pitää työhakemistossaan erikseen omaa branchia ja erikseen trunkkia. Sitten pitää ajella niihin svn mergeä ja merge --reintegratea vuorotellen. (Ja muistaa kumpi on kumpi.) Vähän väliä tulee "maagisia" näkymättömiä muutoksia commitattavaksi, kun Subversion päivittelee mergeinfoa, ja niistä syntyy ehkä uusia revisioita. Kaiken kaikkiaan siis kovin epämääräinen fiilis. Tämä koko toiminnallisuus on selvästi lisätty Subversioniin vasta jälkeenpäin.

Kertaalleen onnistuin saamaan aikaan myös tilanteen, että svn merge --reintegrate ei enää suostunutkaan menemään läpi trunkkiin. Subversion väitti, että olen jättänyt välistä pois jonkin version mergettämisen. Automatiikka siis petti, ja piti lähteä selvittelemään tilannetta käsipelillä ja googlella. Ei mikään bugi, vaan huonosti suunniteltu systeemi, joka aiheuttaa tällaisia tilanteita käyttäjälle.

Gitissä näihin ongelmiin ei törmää, koska se on suunniteltu toimimaan yksittäisen kehittäjän käytössä ilman branchaamista ja mergetystä. Omaa työhakemistoa voi työstää vapaasti ja commitata muutoksensa jatkuvasti. Sitten kun ajetaan git pull ja git push (jotka vastaavat svn mergeä ja merge --reintegratea), niin Gitillä on paljon parempi sisäinen näkemys siitä, miten muutokset yhdistetään trunkkiin.

Gitin brancheista minulla ei ole vielä ollenkaan kokemuksia, mutta olen vain iloinen niin kauan, kun voin välttää ne kokonaan.