Git, hg, dan Versioning
Fajran alias iang suka memprovokasi orang-orang untuk menggunakan git sebagai versioning control systems (vcs). Postingnya yang terakhir membuat saya tergelitik berkomentar di sana, dengan pengalaman di vcs yang sedikit ya tidak apa-apa lah :D
Saya sebelumnya bukan orang yang sering bermain dengan vcs, paling juga cuma checkout di svn di proyek-proyek PLBOS tertentu dan code.google-nya kuliax. Kalo sekarang gimana? masih sedikit juga pengalamannya. Tiga bulan ini sih coba menggunakan distributed vcs (dvcs) untuk mengatur berkas-berkas proyek yang dikerjakan. Biasa, kerjaan penjual rujak.
Pilihan langsung tertuju ke dua dvcs yaitu git dan mercurial aka hg. Langsung saja saya bandingkan fitur-fitur sederhana yang digunakan oleh pengembang serabutan seperti saya seperti clone, add, rm, status, diff, parents, pull, merge, commit, tip, log, glog, dst. Akhirnya, saya pikir hg lebih sederhana dan berjalan sesuai dengan kebutuhan (sekarang).
Berikut catatan-catatan kecil saya tentang git, hg, dan versioning:
- jika git-core kita pasang, maka kita akan mendapatkan puluhan git-bla, hg sendiri hanya menyediakan satu buah executable saja!
- git dan hg dirancang sesuai dengan kebutuhan dari pengembangnya, alur pengembangan dan skala proyek tersebut. git pada awalnya digunakan di pengembangan kernel Linux dan tentu sesuai dengan kebutuhan proyek tersebut
- sebagai pengembang dengan skala proyek yang kecil, hg lebih membantu, paling tidak dalam menyederhanakan perintah dan operasi
- yang penting dalam penggunaan vcs sebenarnya adalah bagaimana vcs itu membantu pengembangan kita agar lancar dan diatur dengan baik, bukan cuma keren-kerenan
- nantinya kita perlu merancang dan mengimplementasikan alur pengembangan sesuai dengan vcs yang kita pakai, misal bagaimana distribusi repo kode dan berkas, merge, bagaimana agar banyak repo tetap sinkron, dst.
- untuk pengguna dvcs awal seperti saya, cara paling mudah adalah dengan menggunakan satu repo master yang isinya di-clone ke mesin-mesin pengembang, jika sudah puas dengan hasil di repo lokal atau istilahnya branch, kita bisa push hasil commit repo lokal ke repo master
- semakin proyek kita berkembang dan pengembang sudah cukup banyak, kita pelan-pelan akan mengubah alur pengembangan. Misal antara pengembang bisa saling melakukan clone repo masing-masing untuk mendapatkan fitur yang sedang dikembangkan dan melakukan merge. Jika sudah puas, salah satu pengembang yang cukup matang kode dan hasilnya bisa mem-push-nya ke repo master agar dapat diakses oleh anggota tim yang lain
- pengguna dvcs awal seperti saya sempat pusing karena alur yang kacau kesana-kemari, clone sini-sana, push sini-sana, merge, push lagi, dst, agar sinkronisasi berjalan dengan baik di banyak mesin dan harapan otomatisasi, juga kasus konflik saat merge serta keharusan untuk melayani permintaan versi terbaru di repo master, padahal hasil commit repo lokal belum di-push ke sana.
Ok, agar lebih sederhana catatan di atas saya simpulkan menjadi tiga poin saja:
penggunaan sesuatu yang baru akan selalu mengubah budaya dan alur kerja kita
gunakan dvcs yang menurut kita nyaman dan mudah digunakan, sesuaikan dengan kebutuhan dan skala proyek
seiring dengan berkembangnya proyek, kita akan belajar untuk mengadaptasi alur pengembangan yang melibatkan dvcs dengan lebih baik, termasuk mengganti dvcs jika dibutuhkan
Sebagai penutup, kutipan dari artikel oleh Patrick Thomson tentang dua dvcs ini menarik:
git vs hg itu seperti macgyver vs jamesbond
dan terpenting dari yang paling penting:
Shut up about the tools you use and write some code.
Salam,
Penjual rujak cupu skala kaki lima


[...] dokumen perbandingan dan analisa DVCS yang akan digunakan, lagi-lagi yang dibandingkan adalah git dan mercurial. Dan untuk kebutuhan code.google dan penggunanya secara umum dipilihlah [...]