Distributed Version Control - Mercurial

From ITTutor.net Wiki

  • Currently0.00/5
Jump to: navigation, search

Jadual kandungan

Pengenalan

Mercurial ialah salah satu daripada Distributed Version Control yang boleh digunakan untuk menguruskan kod sumber projek perisian anda. Perisian lain yang menawarkan fungsi yang sama ialah seperti CVS (Concurent Version Control) dan SVN (Subversion). Bagaimanapun berbeza dengan CVS ataupun SVN ialah Mercurial (hg) dikategorikan sebagai distributed version control manakala CVS/SVN sebagai centralized version control.

Perisian lain yang hampir setara dengan Mercurial ialah Git dan Bazaar. Git ditulis menggunakan bahasa C manakala Mercurial dan Bazaar hampir 100% menggunakan Python beserta sedikit extension ©.

Distributed vs Centralized

Konsep centralized sebagaimana yang dalam CVS sudah digunakan oleh dunia pembangunan perisian (terutama sekali projek open source sejak berkurun lamanya. CVS walaupun terbukti stable dan boleh diharapkan untuk menguruskan sebuah projek perisian mega (Contohnya, projek FreeBSD menggunakan CVS) ia mempunyai beberapa kelemahan. Antaranya bila mengendalikan fail berbentuk binari dan juga tidak mampu menguruskan fail/direktrori rename. Untuk menampung kekurangan CVS ini, projek Subversion (SVN) dimulakan untuk menghasilkan version control system yang lebih baik berbanding CVS. SVN, walau bagaimana pun masih menggunakan model yang sama seperti CVS iaitu centralized.

Centralized

Dalam sistem CVS/SVN kesemua maklumat berkaitan kod sumber perisian yang diuruskan disimpan dalam satu tempat khas yang dipanggil repository. Apabila pengguna (programmer biasanya) ingin membuat pengubahsuaian (edit) kod di repository mereka perlu checkout kod tersebut terlebih dahulu. Salinan yang di checkout oleh pengguna ini dipanggil working directory. Sebarang perubahan yang mereka lakukan kepada salinan tersebut perlu dihantar balik kepada repository melalui proses yang dinamakan commit. Secara ringkasnya, workflow tipikal bagi seoarang programmer apabila menggunakan CVS/SVN ialah:-

  • Checkout daripada repository.
  • Editing.
  • Commit sebarang perubahan ke repository balik.

Ini bermakna, kesemua data akan disimpan dalam satu tempat khas (repository) yang boleh dicapai oleh pengguna sama ada melalui rangkaian (http/ftp/ssh) ataupun sistem fail yang biasa di mana repository dan working directory berada di komputer yang sama. Bagi membolehkan capaian kepada ramai pengguna pada satu-satu masa, satu program khas server biasanya perlu dijalankan untuk menguruskan proses seperti mengesahkan identiti pengguna (authentication) dan sebagainya. Daripada sini dapat dibuat beberapa kesimpulan akan kelemahan model centralized:-

  • Satu repository tunggal - Terdedah kepada risiko kerosakan data (data corruption), masalah scalability apabila bilangan pengguna bertambah.
  • Perlukan capaian kepada rangkaian sekiranya repository berada di tempat berlainan. Ini menyukarkan disconected operation, contohnya apabila programmer perlu bekerja di tempat-tempat yang tiada akses rangkaian.
  • Memerlukan pengurusan khas terhadap server.
  • Penglibatan luar (contohnya dalam projek Open Source) memerlukan kebenaran daripada pemilik repository. Ini biasanya diistilahkan sebagai commit access.

Distributed

Model ini mula mendapat perhatian di awal tahun 2000. Antara perkembangan menarik pada masa itu ialah keputusan yang diambil oleh Linus Torvalds untuk menggunakan perisian version control BitKeeper bagi menguruskan kod sumber projek pembangunan kernel Linux. Linus sebelum itu tidak menggunakan sebarang perisian version control bagi membantunya menguruskan kod sumber Linux. BitKeeper adalah antara version control yang berasaskan model distributed pada masa itu. Keputusan Linus pada masa itu agak menimbulkan kontroversi kerana BitKeeper ialah sebuah perisian proprietary dan bukannya Open Source, walaupun penggunaannya kepada pembangun-pembangun kernel adalah percuma dengan beberapa syarat tertentu.

Penggunaan BitKeeper ternyata membantu mempercepatkan proses pembangunan kernel Linux yang pada masa itu agak lembab disebabkan bebanan kerja yang tinggi ditanggung oleh Linus bagi menguruskan kesemua patch yang dihantar kepadanya. Berlainan dengan CVS/SVN, BitKeeper tidak memerlukan sebarang central repository. Setiap programmer akan mempunyai repository sendiri dan programmer yang lain akan mendapatkan sebarang perubahan dengan cara

... bersambung.

Menggunakan Mercurial

Named branch

Personal tools