Olin vuosia sitten iloinen päästessäni eroon CVS:stä, kun Subversion kehitettiin. Sen jälkeen Subversionista onkin tullut aika universaali valinta versiohallintaan kaikissa mahdollisissa softaprojekteissa, vaikka sinä on omat puutteensa.

Työryhmäkäytössä Subversionin selkein ongelma on ollut branchien hallinnasta puuttuva automatiikka. Projektista voi kyllä tehdä uuden branchin, kun haluaa työstää jotain ominaisuutta rauhassa, mutta muutosten yhdistäminen takaisin pääprojektiin saattaa osoittautua haastavaksi. On ollut pitkälti kehittäjän omalla vastuulla osata ottaa diffit oikeiden versioiden väliltä. Pääprojektiin ilmestyneiden muutosten yhdistäminen omaan branchiin on myöskin hankalaa.

Git hoitaa branchit ja merget automaattisesti. Kehittäjä voi koska tahansa luoda projektista oman henkilökohtaisen branchin (git clone), työstää sitä kaikessa rauhassa ja committailla muutoksiaan paikallisesti. Kun muutokset sitten valmistuvat, ne on helppo yhdistää pääprojektiin yhdellä komennolla (git pull). Omaa branchiaan voi myöskin pitää jatkuvasti ajan tasalla pääprojektiin tehtyjen muutosten kanssa (git pull toiseen suuntaan), jolloin ei ajaudu liian kauas todellisuudesta.

Olen tutustunut Gitiin vasta muutaman tunnin ajan, mutta olen jo todennut pitäväni siitä. Esimerkiksi seuraavat asiat on tehty fiksusti:

  • Git-repository toimii paikallisesti, joten ei ole tarvetta tehdä projektille mitään "keskusvarastoa" omalle palvelimelleen. Sellaisen voi kyllä tehdä, jos haluaa, että projektilla on yksi selkeä repository URL. Mutta muuten esimerkiksi projektin webroot voi toimia suoraan omana repositorynaan.
  • Paikallisuus tarkoittaa, että esimerkiksi omassa läppärissä voi tehdä committeja ja muita versionhallintaoperaatioita, vaikka ei olisi kiinni Internetissä. Lopuksi ne vain yhdistetään keskusvarastoon.
  • Git ja Subversion toimivat mainiosti rinnakkain. Subversion tallentaa omat juttunsa .svn-hakemistoihin jotka voi ignorata Gitistä. Git taas tallentaa kaiken yhteen .git-hakemistoon, jonka voi ignorata Subversionista. Sitten vaan commitataan muutokset aina molempiin.
  • Olemassaolevan Subversion-repositoryn voi myös muuntaa Git-repositoryksi siten, että kaikki historiatiedot, branchit ja tagit säilyvät.
  • Git-komentorivityökalujen tulosteissa on kivat värit (jotka pitää ensin enabloida asetuksista).
  • Gitiin voi varastoida myös symlinkkejä, joten Linux-pohjaisten webbisaittien ja muiden projektien hallinta onnistuu tältäkin osin. Pelkkiä tyhjiä hakemistoja Git ei varastoi, mutta tämä ei liene yleensä ongelma.
  • Gitiä voi käyttää yhdessä Subversionin kanssa siten, että Subversion toimii päävarastona. Kehittäjä voi hyödyntää Gitiä omassa työssään ja commitata muutokset lopuksi Subversioniin.

Töissä ajattelin seuraavaksi tutkia, toimisiko Subversionin ja Gitin yhdistäminen siten, että projektista työstetään uusia ominaisuuksia käyttäen Gitin brancheja, jotka sitten lopuksi pullataan Subversionin puolelle ja commitataan osaksi pääprojektia. Tämä tarkoittaisi, että totuttuja toimintatapoja Subversionin suhteen ei tarvitsisi muuttaa, mutta Git-käyttäjät voisivat kuitenkin hyödyntää uusia ominaisuuksia.