Living life and Make it Better

life, learn, contribute

Endy Muhardin

Software Developer berdomisili di Jabodetabek, berkutat di lingkungan open source, terutama Java dan Linux.

Sharing Repository Git

Skenario : selama ini kita coding di laptop sendiri saja. Kemudian ada kebutuhan untuk kolaborasi dengan orang lain melalui Git. Bagaimana caranya? Baiklah mari kita bahas di artikel ini.

Inisialisasi Repository Git

Pertama, kita inisialisasi dulu repository Git. Masuk ke dalam folder project dan ketikkan

git init

Git akan membuat repository kosong di dalam folder project, ditandai dengan adanya folder baru bernama .git

Selanjutnya, kita akan memasukkan semua file dan folder project kita ke dalam repository. Yang harus dimasukkan adalah file source code, baik itu Java, HTML, XML, dan sebagainya. Yang tidak perlu dimasukkan adalah file hasil kompilasi atau hasil generate. Kita perlu mendaftarkan file yang tidak ingin disimpan dalam file konfigurasi yang bernama .gitignore

File ini harus kita buat sendiri menggunakan text editor. Berikut contoh isi filenya, bila kita coding menggunakan Eclipse atau Netbeans

[gist id=773975]

Setelah kita setting ignore file, berikutnya kita masukkan semua file dan folder ke dalam antrian.

git add . 

Kemudian, simpan ke repository

git commit -m "commit pertama project XXX"

Project sudah tersimpan di repository Git di komputer lokal kita. Mari kita upload ke server, atau dikenal dengan istilah push.

Share Repository

Kita memerlukan server di mana kita memiliki ijin akses untuk melakukan push. Cara memperoleh ijin akses tidak dibahas pada artikel ini. Silahkan buat account di Github atau Gitorious. Bila ingin push ke repository perusahaan, minta informasinya pada admin Anda.

Setelah kita mendapatkan URL server yang bisa kita gunakan, daftarkan sebagai remote. Berikut perintahnya.

git remote add <namaremote> <URL>

Contohnya seperti ini

git remote add github git@github.com:endymuhardin/project-terbaru-saya.git

Pastikan remotenya sudah terdaftar dengan perintah berikut

git remote -v

Terakhir, mari kita push dengan perintah berikut

git push <namaremote> <namabranch>

Contohnya

git push github master

Hore, project kita sudah naik ke server. Kita tinggal share URL tersebut ke rekan kerja kita.


Menggunakan Gist

Gist adalah fitur yang disediakan oleh Github. Fungsi dasarnya mirip dengan pastebin, yaitu kita bisa paste text di sana, dan disharing dengan orang lain. Keunggulan Gist adalah dia sudah memiliki kemampuan version control dengan Git. Sehingga kita bisa fork, clone, modifikasi, dan push lagi ke repo utama dengan seluruh history tersimpan di sana.

Untuk bisa menggunakan Gist, kita harus memiliki account Github dulu. Setelah itu, kita bisa buat gist di sini.

Cara membuatnya tidak sulit. Cukup entri nama file, keterangan, dan isi text yang mau dishare.

Setelah itu, tekan Create Public Gist. Gist kita akan siap digunakan.

Gist yang sudah dibuat bisa dipasang di blog. Caranya, klik tombol embed.

Nanti akan muncul textfield berisi tag HTML untuk dipasang di blog, kira-kira seperti ini tagnya:

<script src="https://gist.github.com/770832.js?file=HelloWorld.java"></script>

Tag ini bisa langsung dipasang di blog kita. Hasilnya seperti di bawah ini.

Kelemahan cara ini adalah dia membutuhkan javascript, dan isi filenya tidak terindeks oleh spider. Untuk mengatasinya, kita gunakan plugin wordpress ini.

Setelah digunakan, kita cukup memasang tag khusus seperti dijelaskan di websitenya. Ini contoh hasilnya

[gist id=770832]

Sekilas tidak terlihat bedanya antara pakai plugin dan tidak. Tapi coba lihat source halaman ini, klik kanan kemudian View Source. Yang menggunakan plugin, source codenya benar-benar ada tulisannya. Sedangkan yang pakai tag script tidak ada source code hello worldnya.

Nah, kalau sudah pakai ini, tidak perlu bingung lagi mewarnai source code di blog. Kalau mau revisi, tinggal edit aja di Github, dan otomatis di blog langsung terupdate.


Instalasi Git di Windows

Setelah kemarin kita bahas migrasi di sisi server, sekarang kita bahas instalasi di client. Kenapa yang dijelaskan hanya Windows, sedangkan Linux tidak? Well, ini karena di Linux instalasinya begitu mudah sehingga terlalu pendek kalau ingin dijadikan satu posting sendiri.

Gak percaya? Ini caranya install di Ubuntu. Buka command prompt, dan ketik

sudo apt-get install git-core git-svn git-gui gitk

Sedikit konfigurasi standar.

git config --global user.name "Endy Muhardin"
git config --global user.email "endy.muhardin@geemail.com"
git config --global color.ui "true"

Kemudian, bila kita belum punya public key, silahkan bikin seperti tutorial di sini.

Dan selesailah sudah. Seperti saya bilang sebelumnya, singkat dan sama sekali gak seru. Gak ada screenshotnya :D

Nah, mari kita bahas instalasi di Windows.

Pertama, unduh Git dari websitenya. Pastikan kita mengambil yang sesuai dengan arsitektur komputer kita (32 bit atau 64 bit).

Setelah diunduh, tentu kita jalankan. Berikut screenshot next-next seperti biasa.

Dobel klik installer

Allow instalasi

Welcome

License

Lokasi Instalasi

Components

Menu Folder

Perhatikan, untuk langkah selanjutnya, kita perlu mengganti opsi default menjadi pilihan yang kedua.

Default Windows Command Prompt

Line Endings

Terminal Emulator

File Cache

Proses Instalasi

Selesai

Sampai di sini, instalasi Git sebetulnya sudah selesai. Tapi kita perlu membuat pasangan public dan private key supaya bisa mengakses Github, Bitbucket, atau provider lain melalui protokol SSH. Dengan menggunakan protokol SSH, kita tidak perlu mengetik username/password setiap melakukan sinkronisasi dengan remote repository.

Membuat Key Pair

Pertama, kita jalankan dulu Git Bash. Ini akan membuka command prompt khusus yang disediakan Git.

Menu Git Bash

Selanjutnya, jalankan perintah ssh-keygen. Kita akan ditanyai nama file yang akan dibuat. Ikuti saja defaultnya, yaitu id_rsa untuk private key, dan id_rsa.pub untuk public key.

Kita juga akan dimintai password untuk membuka private key. Tekan Enter bila tidak mau pakai password.

Generate public dan private key

Selanjutnya, kita akan menemui kedua file private dan public key di folder C:\Users\namauser\.ssh seperti ini.

Lokasi file public dan private key

Kedua file bisa dibuka dengan text editor. Yang perlu kita buka hanyalah public key saja.

Public key dibuka dengan Notepad

Isi public key ini nantinya akan kita pasang di Github

Clone dari Github

Untuk bisa clone dari github, pertama kali kita harus punya account Github. Silahkan daftar dulu.

Setelah punya account, login, dan kita akan melihat dashboard.

Klik account setting, dan masuk ke menu SSH Public Keys

Pastekan public key yang sudah kita generate pada langkah sebelumnya. Setelah diadd, public key kita akan terdaftar. Kita boleh pasang public key banyak-banyak, karena biasanya satu public key mencerminkan satu komputer. Bisa saja kita punya PC dan juga Laptop.

Setting Public Key di Bitbucket

Selain Github, provider lain yang juga populer adalah Bitbucket. Untuk mendaftarkan public key di Bitbucket, kita bisa akses menu di kanan atas, yang ada gambar avatar kita.

Menu Kanan Atas Bitbucket

Pilih Bitbucket Settings, kita akan mendapatkan halaman Settings

Bitbucket Setting

Klik SSH Keys di kiri bawah. Kita akan mendapati halaman untuk menambah SSH Keys.

Daftar SSH Key

Klik Add Key untuk menambah public key SSH. Selanjutnya, copy dan paste isi public key kita ke kotak yang disediakan.

Copy Paste Key

Klik Save, dan public key kita sudah terdaftar

Daftar SSH Key Baru

Kita juga akan mendapatkan notifikasi lewat email bahwa ada SSH key baru yang didaftarkan

Notifikasi Email

Mengunduh Isi Repository

Setelah public key didaftarkan, selanjutnya kita lihat repository yang kita punya.

Kalau belum punya repository, Anda bisa fork repository belajarGit punya saya, sehingga nanti Anda punya repo belajarGit sendiri.

Perintahnya adalah sebagai berikut (jalankan dari command line)

git clone git@github.com:endymuhardin/belajarGit.git

Sekarang repository sudah ada di local, dan siap digunakan. Bagaimana cara menggunakannya, stay tuned. Akan dibahas di posting berikutnya.


Migrasi Subversion ke Git

Di tahun yang baru ini, kami di ArtiVisi juga beralih menggunakan version control baru, yaitu Git. Menggantikan Subversion yang sudah kita gunakan sejak 2008.

Ada banyak keunggulan Git dibandingkan Subversion, diantaranya:

  • offline operation. Git adalah distributed/decentralized version control system (DVCS), artinya tidak membutuhkan server terpusat untuk bisa bekerja. Keunggulan ini berakibat pada keunggulan berikutnya, yaitu:

  • commit sesuai task, bukan sesuai koneksi internet. Dulu, karena koneksi internet terbatas, programmer commit hanya pada saat ada internet. Akibatnya satu commit berisi perubahan untuk banyak task, tercampur aduk tidak jelas peruntukannya. DVCS memungkinkan programmer untuk commit walaupun tidak ada koneksi internet, dan melakukan sinkronisasi pada saat offline.

  • fitur staging area di Git, memungkinkan kita untuk mengatur isi commit secara detail.

  • fitur rebase untuk mengatur commit. Commit yang teratur akan memudahkan review.

  • branch dan merge yang lebih baik daripada subversion. Karena branch dan merge mudah, maka kita bisa menerapkan berbagai teknik workflow dalam mengelola development.

  • website social coding. Github dan Gitorious merupakan Facebook-nya para programmer. Untuk bisa terlibat di dalamnya, terlebih dulu kita harus bisa Git.

Selain Git, ada juga DVCS lain seperti Mercurial (hg), Bazaar (bzr), dsb. Git dipilih karena :

  • popularitas. Semakin populer, tutorial dan aplikasi pendukung semakin banyak, sehingga semakin nyaman digunakan. Saat ini yang paling populer cuma dua, yaitu git dan hg.

  • local/named branch. Ini fitur penting, tapi entah kenapa tidak ada di core hg. Sepertinya ada di extension, tapi yang jelas merupakan workaround dan bukan didesain sejak awal. Tanpa named branch, pilihan workflow menjadi terbatas.

  • Social coding Git (Github dan Gitorious) jauh lebih superior daripada Mercurial (Bitbucket)

Beberapa faktor di atas adalah alasan kenapa Git yang dipilih.

Baiklah, sekarang saatnya migrasi. Kita akan mengkonversi repository Subversion menjadi repository Git. Berikut langkah-langkah yang akan kita lakukan:

  1. Dump repository Subversion

  2. Restore lagi di laptop supaya cepat

  3. Buat authorsfile

  4. Buat ignore file

  5. Clone tanpa metadata

  6. Konversi branch

  7. Konversi tags

  8. Clone hasil konversi menjadi bare repository

Dump repository Subversion

Seperti biasa, sebelum melakukan apapun, lakukan backup dulu. Just in case. Perintahnya gampang.

svnadmin dump /path/ke/repository | bzip2 -c9 > dump-repository-yyyyMMdd.dmp.bz2

Restore lagi di laptop/PC supaya cepat

Langkah ini optional, kalau kita ingin melakukannya di komputer kita sendiri, bukan di server. Tapi sebaiknya dilakukan, karena nanti kita akan checkout beberapa kali yang pasti membutuhkan waktu lama jika dilakukan ke server.

Perintah restore gampang.

bzcat dump-repository-yyyyMMdd.dmp.bz2 | svnadmin load /path/ke/repo/svn/di/lokal

Buat authorsfile

Setelah kita memiliki repository Subversion, kita perlu mengambil daftar nama orang-orang yang pernah commit. Ini akan kita butuhkan pada waktu konversi. Nama committer ini diambil dari hasil checkout Subversion. Jadi mari kita checkout dulu.

svn checkout file:///path/ke/repo/svn/di/lokal checkout-project-svn

Karena lokal, harusnya hanya membutuhkan beberapa menit saja.

Setelah dilakukan checkout, kita membutuhkan script untuk mengambil nama committer. Berikut isi scriptnya, simpan saja dengan nama extract-svn-authors.sh

#!/usr/bin/env bash
authors=$(svn log -q | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq)
for author in ${authors}; do
  echo "${author} = NAME <USER@DOMAIN>";
done

Jalankan script tersebut di dalam folder hasil checkout.

cd checkout-project-svn
sh /path/ke/script/extract-svn-authors.sh > nama-committers.txt 

Ini akan menghasilkan file nama-committers.txt yang berisi nama committer seperti ini :

endy = NAME <USER@DOMAIN>

Editlah file ini supaya mencerminkan nama dan email yang benar, seperti ini :

endy = Endy Muhardin <endy.muhardin@geemail.com>

Buat ignore file

Dalam mengerjakan project, ada file-file yang ada di folder kerja, tapi tidak kita masukkan ke repository. Misalnya file hasil kompilasi, setting IDE, dan sebagainya. File dan folder hasil generate ini biasanya kita daftarkan di ignore list, supaya tidak ikut dicommit ke repository. Kita perlu mengkonversi format ignore di Subversion (svn property ignore) menjadi format ignore versi Git (yaitu file .gitignore).

Untuk membuatnya, kita clone dulu repository Subversion menjadi repository Git. Ini dilakukan di folder yang berbeda dengan hasil checkout Subversion di langkah sebelumnya.

cd .. 
git svn clone --stdlayout -A nama-committers.txt file:///path/ke/repo git-svn-migrasi-project-dengan-metadata

Setelah diclone, konversi ignore list nya.

cd git-svn-migrasi-project-dengan-metadata
git svn show-ignore > .gitignore

Clone tanpa metadata

Selanjutnya, kita lakukan clone lagi. Kali ini tanpa menyertakan metadata, sehingga hasilnya bersih. Metadata ini digunakan bila kita ingin tetap commit ke repository Subversion, tapi ingin menggunakan Git sebagai frontend.

Perintahnya mirip seperti sebelumnya, kali ini kita tambahkan opsi tanpa metadata.

cd .. 
git svn clone --no-metadata --stdlayout -A nama-committers.txt file:///path/ke/repo git-svn-migrasi-project-tanpa-metadata

Ini akan menghasilkan folder git-svn-migrasi-project-tanpa-metadata berisi repository Subversion yang sudah dikonversi menjadi repository Git. Semua langkah selanjutnya akan dilakukan di dalam folder ini.

Setelah selesai, kita masukkan file .gitignore ke repo Git yang baru ini.

cd git-svn-migrasi-project-tanpa-metadata
cp ../git-svn-migrasi-project-dengan-metadata/.gitignore ./
git add . 
git commit -m "add ignore list"

Konversi branch

Branch yang ada di Subversion harus kita konversi menjadi branch di Git. Berikut perintahnya.

git branch -r | grep -v tags | sed -rne 's, *([^@]+)$,\1,p' | while read branch; do echo "git branch $branch $branch"; done | sh

Verifikasi hasilnya dengan perintah ini.

git branch -a

Seharusnya semua branch yang ada di repository Subversion akan terlihat di dalam repository Git ini.

Konversi tags

Lakukan perintah berikut untuk mengkonversi tag Subversion menjadi tag Git.

git branch -r | sed -rne 's, *tags/([^@]+)$,\1,p' | while read tag; do echo "git tag $tag 'tags/${tag}^'; git branch -r -d tags/$tag"; done | sh

Verifikasi dengan perintah ini

git tag -l

Pastikan semua tag yang tadinya ada di repository Subversion sudah terdaftar di repository Git.

Clone hasil konversi menjadi bare repository

Setelah nama committer, ignore list, branch, dan tags berhasil kita pindahkan, inilah langkah terakhir. Kita clone sekali lagi menjadi repository bare supaya bisa dishare dengan orang lain. Biasanya repository bare ini kita publish dengan Gitosis, gitweb, atau aplikasi server lainnya.

Perintah ini dilakukan di luar repository Git yang kita gunakan pada langkah sebelumnya.

cd .. 
git clone --bare git-svn-migrasi-project-tanpa-metadata nama-project.git

Ini akan menghasilkan satu folder dengan nama nama-project.git berisi repository Git yang siap dishare.

Demikian posting tahun baru. Semoga kita semua lebih sukses di tahun 2011 ini.


Prototyping

Pada waktu kita melakukan requirement gathering, harapan kita adalah agar requirement yang kita dapatkan di fase requirement tidak jauh bergeser dari requirement final setelah project closing. Kalau pergeserannya jauh, akan mengakibatkan waktu dan biaya pengerjaan project menjadi molor dan akibatnya kedua belah pihak akan dirugikan.

Pergeseran requirement ini bisa disebabkan beberapa hal, misalnya :

  1. business analyst (BA) kurang pengalaman, sehingga tidak bisa mengidentifikasi varian-varian skenario. Akibatnya terjadi banyak ‘hidden requirement’

  2. business analyst kurang teliti, sehingga salah memahami penjelasan user

  3. Perubahan bisnis client, sehingga requirementnya juga berubah

  4. perbedaan persepsi antara user dan analyst atau programmer

Untuk masalah 1 dan 2, solusinya adalah dengan mengganti BA dengan orang yang lebih berpengalaman. Newbie sebaiknya tidak menjadi BA. Bolehlah magang BA, tapi jangan diandalkan untuk jadi BA utama.

Poin 3 juga biasanya tidak masalah. Client biasanya cukup tahu diri kalau terjadi hal ini, sehingga tidak keberatan dimintai charge tambahan.

Nah untuk poin 4, biasanya sulit dideteksi sampai aplikasi kita deliver. Sering terjadi, usernya OK OK saja pada fase requirement, dan tiba-tiba pada waktu kita deliver aplikasinya, dia langsung bingung karena aplikasinya ‘aneh’.

Agar poin 4 ini tidak terjadi, sebaiknya kita melakukan prototyping. Bagaimana cara melakukan prototyping yang baik?

Prototyping itu idealnya :

  1. Murah meriah dan cepat Dalam 1 hari kita harus bisa menggambar minimal 10 screen. Begitu usernya selesai ngomong/gambar di papan tulis, screennya juga harus langsung jadi. Jangan sampai effort untuk prototyping lebih besar dari effort untuk coding.

  2. Gampang diubah Tujuan prototype adalah supaya user bisa merasakan seperti apa aplikasinya nanti. Kalau dirasakan kurang sesuai, tentunya dia ingin mengubahnya. Nah, jangan sampai minta geser tombol aja harus nunggu 30 menit.

  3. Mirip aslinya. Kalo ini lebih ke sisi development. Biar efisien, begitu prototype sign off, kita bisa mulai paralel coding dan bikin user manual. Kalo prototypenya udah bener2 mirip, bisa langsung discreenshot dan dipasang di user manual. Jadi begitu aplikasi jadi, user manual juga selesai.

  4. Terlihat belum selesai Ini agak kontradiktif dengan tips #3. Kalau prototype kita sangat mirip aplikasi betulan, client akan memiliki persepsi bahwa aplikasinya sudah hampir selesai. Padahal belum ada coding sama sekali. Oleh karena itu, sangat penting kita tekankan ke client bahwa masih ada jangka waktu yang lama sebelum aplikasi betulannya selesai.

Ada beberapa tools yang bisa digunakan untuk prototyping, yaitu

Netbeans

Untuk project aplikasi desktop, inilah yang biasa kami gunakan di ArtiVisi. Screen dapat dibuat dengan sangat cepat, lengkap dengan behavior standar seperti popup dialog, scroll table, dsb.

Untuk project web, biasanya kita langsung coding di HTML dan Dojo, tentunya tanpa koneksi ke back end.

Sebagai nilai tambah lain, setelah prototype di-approve client, programmer bisa langsung meneruskan coding.

Balsamiq Mockup

Tools ini berbayar dan dijalankan menggunakan Adobe AIR.

Pencil Tools ini lumayan bagus, dijalankan sebagai Firefox Add Ons. Sudah ada palette untuk berbagai UI component seperti combo box, text area, dsb. Setelah selesai menggambar, kita bisa langsung mengekspornya menjadi image.

Berikut contoh mockup yang baru saja saya buat menggunakan Pencil.

Ini versi ‘bagus’ yang mirip aslinya.

Mockup Login Screen ala Windows XP

Supaya client sadar bahwa ini adalah prototype, kita bisa gunakan versi yang coret-coretan.

Mockup Versi Coretan

Source file untuk mockup di atas bisa diunduh di sini.

Demikianlah sedikit tips dan trik. Semoga bermanfaat.