Manajemen Source Code dengan Subversion


Version Control

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

Kemampuan menggunakan version control merupakan hal yang masih langka ditemukan di kalangan programmer Indonesia. 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 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 seorang/tim programmer 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.

Hal-hal yang mampu dilakukan oleh Version control adalah:

  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.

Ada banyak aplikasi version control yang tersedia, beberapa aplikasi yang cukup terkenal antara lain :

  • Visual Source Safe, version control buatan microsoft. Terintegrasi dengan Visual Studio
  • CVS, version control dikembangkan oleh CollabNet yang dipimpin oleh Karl Fogel. CVS adalah version control yang dikembangkan dengan lisensi opensource dan sudah sangat banyak digunakan. CVS juga mempunyai software pendukung yang sangat besar, dan juga didukung oleh hampir semua IDE besar.
  • Subversion, dibuat dengan tujuan untuk menggantikan CVS yang mempunyai kelemahankelemahan sehingga tidak cocok lagi dengan paradigma pengembangan perangkat lunak yang sedang trend saat ini. Subversion ini dikembangkan oleh CollabNet dan dibuat oleh orang yang sama yang membuat CVS, Karl fogel.

Cara Penggunaan Subversion

Untuk lebih jelasnya bagaimana sekenario version control digunakan, dapat di ilustrasikan dengan cerita berikut.

—||—

Endy dan Anton terlibat proyek pengembangan sebuah aplikasi untuk menampilkan data berupa text dan gambar dari dalam database. Endy dan Anton 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.

Anton 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.

Selama tenggat waktu pengembangan aplikasi 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, Anton menginstal aplikasi di tempat klien. Semua kode program terbaru diambil dari repository dan dimasukkan ke dalam laptop untuk selanjutnya dibawa ke tempat presentasi. Setelah tiba di tempat klien, kode program tersebut mengalami error serius ketika dikompilasi. Anton tidak panik, dengan tenang segera melakukan koneksi lewat internet. Kemudian mengakses repository server dan melihat catatan perubahan kode program. Ternyata Endy menambahkan satu bonus fitur baru untuk melihat gambar dalam tampilan thumbnail yang dikerjakan semalam, pasti ini penyebabnya, karena hari sebelumnya Anton sudah memastikan bahwa semua fungsi program berjalan dengan baik dan siap untuk diimplementasikan.

Untungnya Endy tidak lupa untuk memberikan penanda (tag) terhadap perubahan yang dilakukanya semalam. Dengan cepat Anton mengambil kode program sesuai kondisi sebelum perubahan yang dibuat oleh Endy 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 sangatlah penting. 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.

Keuntungan Menggunakan Subversion

Subversion merupakan salah satu aplikasi Version Control yang sifatnya gratis dan legal (opensource). Selain itu subversion sudah menjadi standard de facto version control di dunia opensource. Misalnya, 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 diatur 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 :

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

Instalasi Subversion

Untuk menginstal Subversion langkah-langkah yang dilakukan adalah sebagai berikut :

  1. Pertama-tama silahkan download Subversion Package versi windows dari website http://subversion.tigris.org.
  2. Hasil download adalah berupa file .exe,  double click file tersebut dan ikuti langkah-langkah instalasi selanjutnya tanpa merubah konfigurasi apapun, cukup gunakan konfigurasi default.
  3. Lakukan pengecekan apakah Subversion sukses terinstal dengan membuka “Command Prompf
    [ Start > Run > cmd ]
  4. Ketikkan “svn” pada command prompf, jika proses instalasi berhasil maka akan muncul pesan “type svn help for usage

Sampai disini Subversion sudah dapat digunakan dengan protokol file:///. Protokol ini mensyaratkan repository harus berada didalam komputer lokal. Protokol file juga bisa mengakses repository yang berada di mesin/komputer yang berbeda dengan menggunakan mekanisme file sharing, namun cara ini sangat tidak dianjurkan karena dapat memunculkan kemungkinan error yang belum dapat di prediksi sepenuhnya.

Cara yang lebih baik untuk mengakses repository Subversion adalah dengan menggunakan protokol svn://. Protokol ini memerlukan program svnserve dijalankan disisi repository server untuk mendengarkan dan merespon perintah svn client.

Ada dua cara untuk menjalankan svnserve di windows, cara pertama adalah menjalankan svnserve dengan “Command prompt“. Tetapi cara ini sangat tidak praktis, karena jendela command prompt akan selalu tampil selama svnserve berjalan. Jika jendela command prompt secara tidak sengaja ditutup, maka program svnserve juga akan berhenti. Masalah lain akan timbul jika komputer server mati atau restart tanpa terjadwal, svnserve tidak otomatis dijalankan, sehingga layanan subversion melalui protokol svn:// tidak dapat diakses oleh pengguna.

Cara kedua adalah dengan menginstall svnserve sebagai windows service, sehingga svnserve akan berjalan di background secara transparan. Kita juga dapat mengelola service svnserve dengan lebih baik, misalnya dengan menjalankanya menggunakan User System, autostart ketika windows baru saja dinyalakan dan lain-lain. Caranya sangat gampang, jalankan command berikut ini di dalam command prompt:

sc create Subversion binpath= “c:/program files/subversion/bin/svnserve.exe –service –root d:/cvsrepo” displayname= “Subversion” start= auto obj= “NT AUTHORITY\LocalService”

Keterangan :

  1. sc perintah windows untuk mengelola service, mempunyai beberapa option antara lain: create, start, delete
  2. binpath berisi perintah untuk menjalankan perintah yang akan dijalankan sebagai windows service.
  3. svnserve.exe modul subversion untuk menerima dan mengirim response perintah subversion melalui protokol svn://
  4. –service option svnserve untuk menjalankanya dalam mode service.
  5. –root d:/svnrepo option untuk menggunakan folder tersebut sebagai tempat dimana semua repository Subversion akan disimpan
  6. displayname nama yang nantinya akan ditampilkan di jendela service sebagai pengenal dari service
  7. start mode penjalanan service ketika windows pertama kali dinyalakan, dalam hal ini auto, artinya service svnserve akan otomatis dijalankan ketika windows pertama kali dinyalakan.
  8. obj option ini disarankan oleh microsoft untuk memilih user yang akan menjalankan service.

Catatan:

  • Antara tanda = dengan nilai dari option harus diberi satu spasi. contoh start= auto, jika anda mengetikan start=auto atau start = auto perintah tersebut akan gagal.
  • Perintah tersebut harus diketik dalam satu baris.
  • Artikel ini didasarkan pada Windows XP SP2. Belum dilakukan pengetesan untuk versi windows yang lainya.

Instalasi TortoiseSVN

Dalam tutorial ini akan dibahas aplikasi client dari subversion yaitu TortoiseSVN. Langkah-langkah instalasinya sebagai berikut:

  1. Aplikasi TortoiseSVN dapat didwonload dari alamat http://tortoisesvn.tigris.org.
  2. Setelah di download double click file hasil downloadnya, dalam hal ini adalah TortoiseSVN-1.4.3.8645-win32-svn-1.4.3.msi, kemudian ikuti instruksi selanjutnya dengan menggunakan konfigurasi default.

Setelah selesai proses instalasi, restart windows agar proses integrasi TortoiseSVN dengan windows explorer berjalan sukses, seperti yang ditunjukkan gambar diatas.

Menggunakan Subversion

# Membuat project baru

Jika kita bergabung ke dalam sebuah tim pengembangan perangkat lunak yang sudah berjalan, kemungkinan besar sudah tersedia repository dan server Subversion yang sudah terisi data dan kita tinggal menggunakannya. Namun jika kita baru memulai project pengembangan perangkat lunak, kita harus membuat repository baru yang masih kosong.

Pada bagian ini, kita akan melihat bagaimana memmulai project baru, membuat repository kosong dan beberapa pertimbangan yang perlu diperhatikan dalam mengatur folder repository.

# Membuat repository baru

Cara membuat repository baru menggunakan TortoiseSVN sangatlah mudah, pertama-tama buatlah sebuah folder baru yang masih kosong, misalnya D:\svnrepo, folder ini nantinya akan berisi repository-repository proyek pengembangan perangkat lunak. Kemudian buat lagi sebuah folder baru didalam D:\svnrepo, misalnya : dataviewer.

Setelah folder untuk menyimpan repository dan folder untuk menyimpan proyek selesai dibuat, kita sudah siap untuk membuat repository baru, caranya sangat mudah. Buka windows explorer, klik kanan di jendela explorer sebelah kanan, pilih menu:
[ TortoiseSVN > Create repository here… ]

Kemudian akan muncul jendela yang akan menanyakan apakah tipe dari repository yang akan digunakan? Terdapat dua pilihan, yaitu: Native Filesystem (FSFS) atau Barkeley DB (BDB). Pilih FSFS, kemudian klik OK.

Setelah selesai, maka repository sukses dibuat dan kita akan melihat beberapa file dan folder dibuat secara otomatis oleh Subversion. File-file ini digunakan oleh Subversion untuk menyimpan semua data kode sumber, dan digunakan untuk menyimpan keterangan-keterangan yang diperlukan oleh subversion. Kita tidak akan pernah mengedit file-file ini secara langsung, kecuali file-file yang berada dalam folder hooks. File yang berada dalam folder hooks disebut dengan Hooks script yang merupakan file executable dan dijalankan oleh subversion pada event-event tertentu.

Kita tidak perlu membahas secara detail semua file yang dibuat secara otomatis oleh Subversion. Yang harus kita perhatikan adalah alamat dari folder yang telah kita buat tadi, yaitu : D:\svnrepo\dataviewer. Alamat ini nantinya akan kita gunakan sebagai alamat untuk mengakses repository.

Untuk mengetahui apakah repository yang telah kita buat sukses, maka cobalah dengan mengakses repository tersebut menggunakan repo-browser dari TortoiseSVN. Berikut ini langkah-langkah menampilkan isi repository menggunakan repo-browser:

  1. Munculkan windows explorer context (pop-up) menu dengan melakukan klik-kanan jendela bagian kanan dari windows explorer.
  2. Pilih menu [ TortoiseSVN > Repo-browser ]
  3. Setelah itu akan muncul jendela input yang meminta kita untuk memasukkan alamat repository yang akan dilihat. Masukkan alamat URL : file:///D:\svnrepo\dataviewer kemudian klik OK
  4. Setelah semuanya dilakukan, akan muncul jendela Repo-browser

Bisa kita lihat bahwa repository yang barus saja kita buat berhasil dan tentu saja isinya masih kosong.

# Struktur folder repository

Setelah repository selesai dibuat, hal pertama yang harus dilakukan adalah menentukan struktur folder dari repository. Struktur folder ini sangat penting untuk diperhatikan, karena struktur folder yang rapi dan jelas dapat memudahkan pengguna mengerti isi repository hanya dengan melihat struktur dan nama folder. Hal ini sangat bermanfaat untuk menghindari kesalahan yang mungkin dilakukan oleh user, misalnya commit ke folder yang salah.

Secara umum folder dalam repository dibagi menjadi tiga, yaitu:

  1. Trunk, dimana semua kode program yang masih dalam tahap pengembangan berada
  2. Tag, pada beberapa event tertentu kita perlu menandai repository dan membuat titik yang jelas dimana kita bisa mengembalikan kondisi kode program dengan mudah. Misalnya rilis aplikasi ke QC, rilis aplikas ke publik atau menginstal program ke lingkungan production.
  3. Branch, jika kita ingin bekerja secara paralel, misalnya ada satu tim kecil pengembang yang melakukan bug fixing dan tim yang lain tetap menambahkan fitur baru ke folder trunk, kita perlu satu folder terpisah untuk bekerja, folder untuk memenuhi kebutuhan ini disebut sebagai branch.

Untuk membuat ketiga folder tersebut sangat mudah, buka kembali Repo-browser dengan URL repository yang baru saja kita buat tadi. Lihat bagian sebelumnya untuk mengetahui langkah-langkah membuka Repo-browser.

Setelah Repo-browser terbuka, maka kita siap untuk membuat folder baru, ikuti langkah-langkah berikut ini:

Klik kanan didalam repo-browser untuk menampilkan context menu, pilih menu create folderSetelah itu akan muncul jendela input untuk memasukkan nama dari folder yang baru saja dibuat. Masukkan tiga buah nama folder yang sudah kita definisikan sebelumnya: trunk, branch dan tag.

Setelah repository sukses dibuat dan struktur folder repository telah siap, hal berikutnya yang perlu kita lakukan adalah menentukan struktur folder untuk project kita. Kita melakukan ini dengan cara yang sedikit berbeda dengan ketika kita membuat struktur folder repository.

Ada dua cara yang bisa dilaksanakan untuk mengubah isi dan struktur folder repository. Cara pertama adalah dengan langsung mengedit isi repository dengan menggunakan repo-browser seperti sebelumnya sudah kita lakukan.

Cara kedua adalah dengan melakukan check-out repository ke folder lokal, lakukan perubahan terhadap folder lokal, baru kemudian gunakan perintah-perintah Subversion untuk mengupdate repository seperti commit, import dan add.

Contoh Penggunaan Subversion

Sebelum memulai bekerja dengan subversion, ada beberapa konsep yang harus dipahami mengenai version control. Diantaranya adalah versioning model dan mekanisme delta. Aplikasi version control yang berbeda dapat mengimplementasikan konsep ini secara berbeda pula.

# Permasalahan file sharing

Misalnya ada dua programmer Endy dan Anton, sedang bekerja di sebuah file yang sama. Mari kita lihat apa yang terjadi bila kita tidak menggunakan version control, tetapi mengandalkan mekanisme file sharing. Mekanisme file sharing ini menyimpan file dalam sebuah repository yang terletak di sebuah komputer yang salah satu foldernya dishare, atau di FTP server, atau yang paling primitif, source code diletakkan di dalam USB Flashdisk.

Ketika akan mulai bekerja, Endy dan Anton akan mengambil file yang sama dari dalam repository. Setelah itu Endy dan Anton mulai bekerja di folder lokal masing-masing.

Kebetulan Endy selesai lebih dulu. Kemudian dia segera menyimpan perubahan di repository. Tidak lama kemudian Anton selesai bekerja dan mengirimkan perubahan yang sudah dilakukanya ke dalam repository.

Tanpa adanya aplikasi Version Control yang baik, perubahan yang dibuat oleh Anton akan menimpa perubahan yang telah disimpan Endy sebelumnya. Bayangkan jika jumlah programmer tak hanya dua, melainkan puluhan atau bahkan ratusan orang. Maka akan terjadi kekacauan. Permasalahan File sharing ini dapat diselesaikan dengan dua pendekatan yaitu model Lock-Edit-Unlock, dan model Checkout-Edit-Merge.

# Model lock-edit-unlock

Model lock-edit-unlock adalah model yang dipilih oleh Microsoft untuk mengembangkan version controlnya yaitu Visual Source Save. Dengan skenario yang sama, kita akan melihat bagaimana model ini mengatasi masalah file sharing.

Endy lebih dahulu terkoneksi ke internet dan ingin bekerja di suatu file. Dia langsung saja mengambil file tersebut dari repository. Secara otomatis Visual Source Safe akan mengunci file yang sedang dipakai oleh Endy.

Tidak lama kemudian Anton konek ke internet, dan ingin bekerja dengan file yang sama. Dia berusaha untuk mengambil file tersebut dari repository. Tentu saja, usaha Anton mengambil file tersebut dari repository gagal karena Endy memegang lock terhadap itu.

Setelah Endy selesai bekerja dengan file tersebut dia akan menyimpan perubahan yang telah dibuatnya ke dalam repository. Proses ini secara otomatis akan melepaskan lock sehingga semua orang kembali bisa bekerja dengan file ini.

Anton mencoba lagi untuk mengambil file tadi dari repository, kali ini usahanya berhasil karena Endy sudah melepaskan locknya.

Ini memang kelemahan dari model lock-edit-unlock. Dengan model ini proses management kode sumber menjadi kaku dan tidak scalable. Model ini sulit mengakomodasikan jumlah programmer yang banyak dan mereka saling bekerja di bagian yang sama. Semakin banyak orang yang bekerja dalam satu tim, mekanisme lock-unlock akan sering terjadi.

# Model checkout-edit-merge

Model inilah yang digunakan oleh Subversion, model ini tidak menyaratkan adanya siklus lock-unlock (walaupun metode lock-unlock juga bisa dilaksanakan oleh Subversion), sehingga kasus rebutan file tidak lagi terjadi. Subversion dapat mengakomodasi tim dengan jumlah programmer sangat besar tanpa harus saling menunggu penggunaan resource.

Mari sekali lagi kita saksikan aksi Endy dan Anton dalam bekerja mengedit file yang sama. Kali ini tidak akan jadi masalah siapa yang akan melakukan proses checkout terlebih dahulu, karena tidak ada lagi mekanisme locking.

Endy selesai lebih dahulu bekerja dengan file tersebut dan segera melakukan commit untuk menyimpan perubahan file ke repository.

Tak lama kemudian Anton juga selesai dengan pekerjaanya dan akan berusaha untuk melakukan commit ke repository. Namun commit yang dilakukan Anton akan mengalami error “Out-of-date”. Error ini disebabkan nilai version repository lebih besar dari nilai version folder lokal Anton.

Untuk mengatasi hal ini Anton harus melakukan Update terhadap folder lokalnya agar nilai version folder lokal sama dengan nilai version repository. Langkah ini juga akan memasukkan perubahan yang dilakukan oleh Endy dalam file tersebut.

Setelah Anton melakukan update, dan mengatasi konflik yang (mungkin) terjadi, Anton dapat melakukan commit dengan aman.

Sumber:
http://students.ee.itb.ac.id/~burhan/uas/tutorial_subversion_1.php

TortoiseSVN help

6 Responses

  1. Makasih mas info nya..
    Lengkap banget……..

  2. Ada yang pengen saya tanyakan lagi mas…

    Misal saya ambil contoh sendiri yah..
    ada 3 programmer, Andi, Budi, dan Wahyu.
    File index.htmldi tambahkan di repositori, lalu Budi dan Wahyu mengambil file itu dari repositori untuk memodifikasinya dengan gaya nya masing.
    Lalu setelah seleseai memodif, maka file di kembalikan ke repositorinya.
    Dalam SVN kan akan terlihat perubahannya.
    bagaiaman melihat perubahan2 itu, artinya yang dirubah oleh Andi dan wahyu akan telihat semuanya..
    Makasih…

    • maaf baru dibalas yha.. perubahan akan terlihat dalam kode (file) index.html nya, yakni file yang sebelunya diupload (commit) pertama kali digantikan dengan revisi terbaru yakni index.html versi Wahyu. Tetapi walaupun kode terbaru sudah berbeda dengan yang pertama bukan berarti file yang pertama direplace begitu saja. File tersebut tetap tersimpan dalam server SVN dan kita bisa memanggilnya sesuai dengan nomer revisinya.
      Bagaimana ciri eksplisit sebuah folder atau file berubah/dimodifikasi?, biasanya terlihat secara eksplisit di komputer client. Bila yang terakhir memodifikasi adalah Budi, maka di komputer Budi dan andi akan terlihat. Cirinya bisa dilihat lewat explorer (bila os memakai windows), logo folder/file ada lingkaran hijau kecil.

  3. Terima kasih mas sangat detil dan lengkap penjelasannya.
    Saya telat banget karena baru belajar svn sekarang. Dan berkat baca artikel di sini saya benar2 paham tentang konsep svn berikut implementasinya.

    Sekali lagi terima kasih🙂

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: