Sunday, March 20, 2016

Tutorial HG Mercurial SCM dengan Bitbucket

Mercurial merupakan sistem kontrol terdistribusi (mostly digunakan untuk source code management) yang "pintar". Mercurial adalah source code management (SCM) serupa dengan git yang digunakan untuk revision control system. Secara sejarah, Mercurial juga dibuat untuk menangani ketidakpuasan atas layanan Bitkeeper sebagaimana Linus membuat Git. Mercurial dibuat Matt Mackall, seorang open source developer yang saat ini bekerja di Facebook. Mercurial hanya "kalah waktu" beberapa saat setelah Git diluncurkan, dan Linux kernel community memilih menggunakan Git daripada Mercurial. Namun, banyak komunitas opensource lebih memilih mercurial seperti GNU Octave dan Herwig.

Secara konsep, mercurial berbasis python yang menjadikannya lebih "lambat" sedikit daripada Git yang berbasis C/C++. Sebaliknya, Mercurial lebih pintar daripada Git stupid content tracker dalam hal mememasukkan file ke repository (hg add), sedangkan git memasukkan file (git add) ke "stage". Impactnya, kita cuma perlu sekali saja meng- "hg add" sebuah file dalam repo. Git perlu "git add" setiap kali ada perubahan.

Instalasi
Pertama kita perlu tahu apakah Mercurial sudah terinstall atau belum pada komputer (Ubuntu) kita. Cek dengan,
$ hg --version

Jika tidak ada nomor versinya maka belum terinstall. Mercurial bisa diinstall melalui apt-get ataupun pip install.
 $ sudo apt-get install mercurial

atau
$ sudo pip install mercurial

Ya, seharusnya dengan salah satu perintah di atas, mercurial sudah bekerja di komputer kita. Saya lebih prefer dengan cara pertama (apt-get) daripada instalasi melalui python (pip). Cek lagi dengan "hg --version" untuk mengetahui berhasil tidaknya instalasi mercurial.

Repository setup
Siapkan beberapa file yang akan ditambahkan pada repository
$ mkdir nama-repo
$ cd nama-repo

Buat beberapa text untuk diimport pada repository. Misal buat tiga text file sebagai berikut
$ echo "foo" >> foo.txt
$ echo "bar" >> bar.txt
$ echo "baz" >> baz.txt

Untuk menghost repository di internet, kita menggunakan bitbucket.org yang menyediakan layanan hg mercurial free unlimited (really!). Ada dua cara untuk membuat repo baru, bisa dari bitbucket.org secara langsung, atau membuat secara local di PC kita kemudian mengimportnya.

Cara I

Jalankan "hg init" untuk mulai menginisiasi directory yang dikontrol dengan hg mercurial
$ hg init

Perintah tersebut akan menghasilkan directory .hg. Kita bisa mengisi informasi didalam file .hg/hgrc dengan path repo yang sebelumnya kita buat di bitbucket.org.
Pada .hg/hgrc, isikan:

[paths]
default = https://username@bitbucket.org/username/nama-repo

Selain itu kita juga perlu menambahkan identitas hg mercurial kita pada /home/.hgrc sebagai berikut: 
     [ui]
     username = My Name 

That's it. Kita bisa mulai membuat repo baru di bitbucket dan mengimpornya.

Cara II
Cara kedua adalah dengan membuat repo dulu di bitbucket, baru kemudian mengimpornya. Dengan cara pertama pun kita juga harus membuat repo di bitbucket sbb:
Bitbucket.org >> Repositories >> Create Repository
Ketikkan nama repository, pilih level akses: publik atau private, dan pada repository type, pilih mercurial, kemudian klik create repository. Untuk cara pertama kita langsung mengimpornya dengan "hg push", sedangkan cara dengan cara kedua ini kita lakukan dengan "hg clone".

$ hg clone https://username@bitbucket.org/username/nama-repo

Kemudian pindah ke directory hasil "cloning", misal:
$ cd nama-repo

dan pindahkan semua file yang akan dikontrol dengan mercurial ke folder "nama-repo" tersebut (foo.txt, bar.txt, baz.txt). Selanjutnya tambahkan dan commit serta push,
$ hg add ./*
$ hg commit -m "commit pertama"
$ hg push

mercurial akan konek dengan bitbucket dan meminta password bitbucket kita. Setelah memasukkan password, proses updating dimulai dan semua file anda sudah berada direpository bitbucket. cek dengan "hg status".

Workflow
So far, workflow hg mercurial adalah sbb: hg add, hg commit, hg push. Perintah-perintah lain yang penting adalah: hg status, hg summary, hg diff dan hg log. Jika repository kita diupdate dari bitbucket langsung atau dari komputer lain, maka workflow untuk mengupdate repo local di komputer kita adalah
$ hg pull
$ hg merge
$ hg update

Perintah pull, merge da update tersebut akan menyikronkan repo local di komputer kita dengan versi terbaru repo di bitbucket.

Solving Conflict/ Force pull
Ada kalanya karena di-edit pada saat yang bersamaan, akan terjadi konflik di repository. Artinya, versi di repository lebih baru dari yang kita edit dan kita tidak bisa mem-push atau me-merge-nya. Solusi pertama adalah me-rename file tersebut dan kemudian mem-force pull. Caranya,
$ hg update -C
$ hg resolve --all

kemudian pull, merge dan update. Cara kedua adalah langsung me-force pull dengan perintah diatas. Ini artinya, file kita akan di-overwrite dengan file yang ada di repository.

Selamat mencoba.

*) Repo tutorial ini bisa dilihat pada bitbucket.org/bagustris/hg-tutorial/, file tersebut merupakan materi workshop Scientific Computing 2016 di Trieste, Italy.
Related Posts Plugin for WordPress, Blogger...