Salah satu tools yang dipakai di tempat kerja saya adalah versioning system. Selama ini kita pakai subversion, dengan workflow dan modeldevelopment yang kita anut sebenarnya ini sudah mencukupi. Meski di beberapa kesempatan kita pun juga memanfaatkan git.
Ada rencana iseng untuk menggantikan subversion dengan git. Kenapa harus diganti? Ada 1001 alasan, terlepas dari kenyataan teknis bahwa git jauh lebih superior dibandingkan dengan subversion.
Saya perlu menyiapkan sebuah git server (semacam github.com) yang nantinya akan dipakai untuk mempermudah kolaborasi. Kehadiran git server ini sebenarnya tidak wajib, karena git mengusung konsep sistem versioning yang terdistribusi, artinya setiap orang yang ingin berkolaborasi bisa langsung mengakses ke repositori lokal masing-masing developer. Tapi tentunya ini akan merepotkan, karena komputer sideveloper belum tentu hidup 24/7.
Dari hasil jalan-jalan, akhirnya saya mencoba beberapa alternatif solusi ini:
1. Gitolite + cgit
2. Gitorious
3. Gitlab
Gitolite + cgit
Gitolite, yang merupakan penyempurnaan dari gitosis, sebenarnya cukup sederhana dan keren. Manajemen repositori git ditangani menggunakan git itu sendiri
Cgit merupakan antarmuka web untuk mengakses repositori git, alternatif lainnya ada gitweb. Cgit cukup kencang waktu diakses karena dia menerapkan sistem caching untuk mengakses objek git.
Protokol http dan git disiapkan untuk akses read-only, sementara untuk akses write ditangani memakai ssh. Proses pemasangan dan konfigurasinya sangat sederhana. Setiap developer nantinya harus mengirimkan kunci publik ssh-nya ke admin git, untuk kemudian didaftarkan ke sistem. Gitolite mendukung konsep berbagi repositori antar developer dan masing-masing user juga bisa ditentukan hak aksesnya terhadap suatu repositori.
Paket gitolite dan cgit tersedia di repositori epel, jadi proses instalasinya relatif mudah.
Gitorious
Percobaan kedua saya jajal pasang gitorious. Aplikasi yang dibangun menggunakan ruby ini requirement yang dibutuhkan gak neko-neko, bisa dijalankan menggunakan ruby versi 1.8.7 (versi ruby yang secara bawaan terpasang di CentOS). Sayangnya progress pengembangan perangkat lunak ini terkesan lambat. Saat saya coba pasang notifikasi email menggunakan activemailer dengan metode smtp+tls (kebetulan saya coba kirim notifikasi menggunakan akun gmail) ternyata modul notifikasinya tidak kompatibel dengan activemailer versi baru. Harus diubah beberapa baris kode supaya proses pengiriman bisa berhasil. Akses ke antarmuka webnya terkesan agak berat.
Setiap project yang dibuat di gitorious dapat memiliki lebih dari satu repositori. Kalau di gitolite dibutuhkan peran serta admin untuk mendaftarkan user beserta kunci publik ssh-nya, di gitorious setiap user bisa membuat project dan repositorinya secara mandiri.
Proses Instalasi gitorious sebenarnya cukup ribet. Untuk mempermudah, saya coba menggunakan gitorious chef recipe punyanyamakewhatis
WARNING: saya tidak terlalu suka dengan cara instalasi yg dilakukan oleh chef recipe ini, alih-alih mengikuti pakem instalasi di CentOS, script ini justru mengadopsi model/gaya debian.
Gitlab
Terakhir, ini yang saya coba. Komunitas pengembang gitlab terlihat sangat aktif. Sayangnya dia butuh versi ruby yang lebih baru. Artinya harus ada usaha lebih untuk menyiapkan paket-paket pendukungnya, karena saya agak males kalau harus memasang sesuatu di luar pakem di server.
Versi terdahulu gitlab ini memanfaat gitolite sebagai backendnya, tapi di versi yang baru ketergantungan terhadap gitolite tersebut sudah dilepas, sebagai gantinya gitlab memakai gitlab-shell.
Sama seperti gitorious, di gitlab setiap user juga dapat mendaftar dan membuat project secara mandiri. Bedanya, setiap project di gitlab hanya memiliki satu repositori.
Kita bisa buat tim, grup dalam suatu project. Kemudian ada fitur merge request (request merge antar branch dalam satu project/repositori).
Atarmuka webnya terlihat modern, agak mirip github. Fitur pull-request masih belum ada di versi yang saya coba, katanya bakal tersedia di versi 5.2 yang akan datang.
Saat instalasi saya menggunakan gitlab-installer. Ada beberapa step di script tersebut yg harus dijalankan secara manual (mulai dari baris ke 157).
Sepertinya gitlab yang akan saya pakai nantinya, sementara ini masih dicoba-coba dulu manfaatin gitlab dengan berbagai skenario.