Subversion / SVN

Pengenalan Subversion / SVN

Version Control

Version control dikenal dengan banyak istilah. Ada yang menyebutnya sebagai Configuration Management Tool, Source code management atau Source Control. Dalam modul ini, istilah yang digunakan adalah Version Control.

Kemampuan menggunakan version control merupakan hal yang masih langka ditemukan di kalangan programmer Indonesia. Tidak banyak buku, tutorial ataupun tempat pelatihan yang menyediakan bahan pembelajaran dalam bahasa indonesia. Bahkan di banyak perusahaan software consultant, version control ini masih jarang digunakan.

Padahal kemampuan menggunakan version control adalah kemampuan wajib yang harus dimiliki oleh tim programmer. Di seluruh dunia, ribuan programmer terlibat dalam pengembangan proyek opensouce, kolaborasi dalam skala raksasa seperti ini mustahil dilaksanakan tanpa adanya version control. Akan terjadi bencana dan kekacauan jika kode sumber hanya diletakkan di website, kemudian dibagi ke semua programmer. Jika dua orang programmer bekerja dalam file yang sama, mereka akan saling menimpa pekerjaan temannya, dan jika terjadi kesalahan maka tidak akan mungkin mengembalikan keadaan kode ke keadaan sebelumnya tanpa usaha yang cukup besar.

Version control dapat membantu sebuah tim pengembang perangkat lunak dengan menyediakan akses kepada setiap anggota tim tanpa harus saling menimpa pekerjaan anggota tim yang lain, seperti yang terjadi jika sebuah tim pengembang menggunakan sharing folder. Version control mampu:

  1. Mencatat perubahan code dan pembuat perubahan
  2. Menyediakan fungsi undo untuk mengembalikan keadaan code ke titik tertentu
  3. Melihat riwayat perubahan code, dari pertama dibuat hingga keadaan yang sekarang
  4. Memungkinkan penulisan code secara paralel tanpa ada kejadian anggota tim menimpa pekerjaan anggota tim yang lain.

Penggunaan Version Control

Di bagian sebelumnya sudah dijelaskan apa itu version control, untuk lebih jelasnya bagaimana sekenario version control digunakan, simak cerita berikut.

Ifnu dan Dhiku terlibat proyek pengembangan sebuah aplikasi untuk menampilkan data berupa text dan gambar dari dalam database. Software ini dikembangkan atas permintaan sebuah stasiun televisi Oke Banged. Ifnu dan  Dhiku berdomisili di tempat yang berbeda dan masing-masing mempunyai kesibukan yang tidak dapat ditinggalkan pada jam kerja. Sehingga mereka mempunyai waktu yang sangat terbatas untuk bertatap muka secara langsung.

Dhiku menginstal version control server dan membuat repository untuk program tersebut di rumahnya yang terhubung ke internet 24 jam sehari, 7 hari seminggu. Semua kode program yang dibutuhkan disimpan dalam repository dan dapat diakses oleh mereka berdua.

Pengembangan aplikasi ini hanya membutuhkan waktu seminggu, karena ukuran aplikasinya yang tidak terlalu besar dan sederhana. Selama waktu tersebut keduanya silih berganti menambahkan kode ke dalam repository. Mengerjakan bagiannya masing-masing dan melakukan test terhadap setiap fungsi yang ditambahkan.

Setelah waktu yang ditentukan habis, Dhiku menginstal aplikasi di stasiun televisi Oke Banged. Semua kode program terbaru diambil dari repository dan dimasukkan ke dalam laptop untuk selanjutnya dibawa ke tempat presentasi. Setelah tiba di kantor stasiun televisi Oke Banged, kode program tersebut mengalami error serius ketika dikompilasi!! Dhiku tidak panik, dengan tenang segera melakukan koneksi ke internet menggunakan CDMA modem. Kemudian mengakses repository server dan melihat catatan perubahan kode program. Ternyata Ifnu menambahkan satu bonus fitur baru untuk melihat gambar dalam tampilan thumbnail yang dikerjakan semalam, pasti ini penyebabnya, karena hari sebelumnya Dhiku sudah memastikan bahwa semua fungsi program berjalan dengan baik dan siap untuk diimplementasikan.

Untungnya Ifnu tidak lupa untuk memberikan penanda (tag) terhadap perubahan yang dilakukanya semalam. Dengan cepat Dhiku mengambil kode program sesuai kondisi sebelum perubahan yang dibuat oleh Ifnu semalam (undo). Kali ini program berjalan dengan lancar tanpa ada satupun error. Berkat digunakanya Version Control dengan disiplin bencana yang ada di depan mata dapat dihindari.

Berdasarkan cerita diatas, jelas bahwa penggunaan Version Control dalam pengembangan software yang dilakukan oleh sebuah tim programmer sangat penting, bahkan sudah wajib hukumnya. Version control akan melakukan pencatatan setiap perubahan kode program. Dengan begitu, banyak sekali manfaat yang dapat diambil dan masalah yang dapat dihindari. Masih banyak lagi fitur-fitur version control yang akan kita bahas dalam bagian-bagian selanjutnya.

Kenapa Subversion?

Kalau ada yang gratis kenapa harus bayar? Kalau ada yang gratis dan legal, kenapa harus membajak? Selain itu subversion sudah menjadi standard de facto version control di dunia opensource. Situs kolaborasi terbesar di dunia sourceforge.net sudah bermigrasi ke Subversion begitu juga situs dev.java.net sudah bermigrasi ke subversion. CollabNet membuat subversion sebagai pengganti langsung dari CVS yang sudah tidak dapat mendukung model pengembangan software dewasa ini. CVS mempunyai beberapa kekurangan, antara lain:

  1. Tidak mendukung atomic commit
  2. Tidak mendukung penyimpanan file binary
  3. Tidak mendukung rename file atau folder
  4. Tidak dapat menyimpan perubahan pada file yang sudah didelete
  5. Ijin akses tidak dapat diatir per folder

Subversion mengatasi semua kelemahan dari CVS dengan sangat elegan. Dengan desain seperti ini Subversion dapat diandalkan untuk mencatat semua perubahan sumber kode dengan sangat teliti. Terutama di era sekarang ini yang mengandalkan paradigma OOP dalam pengembangan software. OOP paradigma menggunakan metode “code by interface” yang terkadang memerlukan langkah refactoring dengan menganti nama method, class (file) atau nama package(folder). CVS tidak dapat mencatat perubahan kode program karena ada penggantian nama dari file atau folder.  Selain mengatasi kekurangan dari CVS, subversion juga mempunyai banyak keunggulan dibandingkan dengan CVS, antar lain:

  1. Dapat dijalankan dalam beberapa protokol, antar lain:  HTTP, file, svn dan svn+ssh.
  2. Dapat melakukan otentikasi user melalui protokol LDAP

Subversion

Kontrol versi adalah alat yang berguna untuk pengembangan perangkat lunak, terutama bila sebuah proyek melibatkan lebih dari satu pengembang, dan Apache Subversion tetap menjadi salah satu sistem kontrol versi open source terpopuler di dunia. Ini juga salah satu yang paling mapan, dengan ekosistem peralatan klien, GUI dan plugin yang dinamis untuk semua kebutuhan kontrol versi Anda.

Namun, ada beberapa potensi jebakan yang harus diwaspadai, terutama bagi pemula Subversion. Bagaimana seharusnya Anda menyusun repositori Anda? Dan bagaimana Anda menerapkan strategi percabangan dan penggabungan yang tidak akan membuat Anda sakit kepala?

  1. Struktur Repositori

Apache Subversion tidak memaksakan struktur file yang ketat, yang memungkinkan Anda mengoptimalkan tata letak repositori agar sesuai dengan kebutuhan khusus proyek. Namun, semua kebebasan ini dapat mengakibatkan overhead admin yang tidak perlu – menerapkan tata letak proyek yang benar sejak awal sangat penting.

Salah satu pertanyaan pertama yang harus Anda jawab saat memulai proyek baru adalah: haruskah saya menggunakan satu repositori untuk beberapa proyek, atau repositori terpisah untuk setiap proyek?

  • Repositori tunggal

Repositori tunggal biasanya paling sesuai untuk beberapa proyek yang memerlukan cross-tracking dan cross-reference. Manfaat dari satu pendekatan repositori adalah bahwa ada satu lokasi di mana semua kode dapat diakses, dan sumber daya (misalnya perpustakaan) dapat dibagi dengan mudah di antara proyek. Ada juga overhead administrasi yang biasanya kurang, karena proyek baru tidak memerlukan repositori baru, dan data dapat dipindahkan antar proyek tanpa kehilangan informasi versi apapun. Namun, ada beberapa kerugian: melakukan tugas admin seperti dumping dan memuat satu repositori besar akan lebih memakan waktu, terutama karena proyek memiliki kecenderungan untuk bertambah besar. Masalah lain yang perlu diingat, adalah bahwa Subversion menerapkan nomor revisi ke seluruh pepohonan;

  • Beberapa Repositori

Ini biasanya digunakan untuk beberapa proyek yang tidak terkait. Beberapa repositori memberi pengguna kebebasan untuk menyesuaikan setiap repositori agar sesuai dengan proyek individual, dan memastikan bahwa nomor versinya bermakna bagi setiap proyek. Namun, kode berbagi bisa menjadi masalah karena Subversion tidak mendukung penggabungan kode antara repositori, dan kode gabungan akan muncul di repo baru tanpa riwayat.

  1. Struktur folder repository

Setelah Anda memutuskan untuk mengatur proyek Anda dalam satu atau beberapa struktur repositori, langkah selanjutnya adalah merencanakan struktur folder repository proyek Anda. Menempatkan beberapa pemikiran untuk merencanakan tata letak Anda terlebih dahulu dapat menghemat kerumitan administratif untuk memindahkan file sekitar nanti.

Untuk kebanyakan proyek, ada baiknya mengikuti tata letak trunk/branches/tags dan membuat perbedaan yang jelas antara kode yang ada di masing-masing:

  • Trunk: ini adalah tempat Anda harus menyimpan kode rilis saat ini – saja! Trunk harus selalu stabil dan bisa dikompilasi.
  • Tags: ini digunakan untuk memberikan snapshot kode pada titik tertentu dalam riwayat proyek Anda
  • Branches: berguna untuk bekerja pada perubahan signifikan, variasi kode dll, tanpa mengganggu kode stabil di trunk.
Gambaran tentang bagaimana Repositori Subversion berkembang dengan menggunakan
percabangan (branches), pemberian tag dan trunk
Share

You may also like...