Bat Family Story Time : Git Flow
Bayangkan dirimu sebagai seorang programmer yang sedang membuat layanan baru untuk sebuah perusahaan. Setelah beberapa bulan menulis kode, product owner mengatakan bahwa ada beberapa fungsi dari kodemu yang tidak jadi digunakan dan kodemu akan digabungkan dengan kode buatan rekan kerjamu. Kamu yang selama ini hanya menulis kode di text editor pun kebingungan, apa yang harus dilakukan untuk mengatasi permasalahan seperti ini? Jawabannya adalah dengan menggunakan version control dan online repository.
Apa itu Version Control?
Version control adalah sebuah sistem yang menyimpan perubahan terhadap suatu berkas atau kumpulan berkas sehingga bisa dipanggil kembali, dan version control system (VCS) adalah software yang menyediakan layanan version control. Saat ini ada banyak VCS yang tersedia, namun pada tulisan ini saya ingin membahas sebuah VCS yang kami gunakan dalam pengembangan proyek kami yaitu Git.
Git
Mengutip dari laman Git sendiri,
“Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.”
Ada beberapa istilah yang umum digunakan saat menggunakan Git, yaitu :
- Repository
tempat penyimpanan seluruh berkas yang ingin kita lakukan pengontrolan versi, biasanya disebut repo. Ada dua versi, yaitu local repo dan remote repo. Local repo adalah penyimpanan & pengontrolan versi yang dilakukan di komputer masing-masing, sedangkan remote repo adalah penyimpanan berkas yang dilakukan secara online. - Staging
Tahap penambahan berkas pada Git yang berfungsi sebagai tempat penyimpanan sementara sebelum dilakukan commit sesungguhnya. Staging disini berbeda dengan cabang staging yang akan dibahas pada Git Flow. - Commit
Fitur utama Git yang menyimpan snapshot dari berkas ke local repo. Bisa dikirim atau diterima antara local repo dan online repo dengan perintahgit push
dangit pull
. - Branch (Cabang)
Percabangan dari kode utama untuk mengembangkan proyek dan menghindari terjadinya konflik saat bekerja dalam tim.
Meskipun tidak ada cara khusus untuk menggunakan Git VCS, namun saat ini yang paling populer digunakan dalam pengembangan proyek perangkat lunak adalah Git Flow.
Git Flow
Metode yang diciptakan oleh Vincent Driessen ini secara umum hanya menggunakan 3 cabang utama, namun proyek kami menggunakan varian dari Git Flow yang membuat beberapa tipe cabang. Cabang-cabang tersebut adalah :
- Master adalah cabang yang berisi source code yang siap di-deploy agar bisa digunakan oleh pengguna.
- Staging adalah cabang berisi source code hampir siap deploy karena harus dilakukan penilaian ulang (review) oleh product owner. Jika sudah diberi lampu hijau oleh PO, maka source code di staging bisa dikirim ke cabang master.
- Development adalah cabang untuk dilakukan penulisan kode, testing dan pengembangan fitur proyek. Pada proyek kami menggunakan teknik penamaan
PBI-[nomor_PBI]-[Judul_PBI]
, dimana PBI adalah Product Backlog Item. - Hotfix, dipakai untuk melakukan revisi cepat jika ditemukan error atau bug pada cabang master
- Coldfix, dipakai untuk melakukan penghapusan fitur backlog yang ditolak oleh PO saat review
Menggunakan Git Flow
Git dapat digunakan pada terminal atau command prompt (Windows) setelah Anda memasang Git dan memasukkannya kedalam environment variables di komputer Anda. Ada beberapa perintah dasar yang bisa digunakan untuk mengaplikasikan Git Flow, yaitu :
- Git Init - Membuat local repo
Cukup jalankan perintahgit init
di direktori yang ingin dijadikan local repo. - Git Clone - Membuat local repo sekaligus mengambil berkas dari remote repo
git clone
memerlukan remote repo yang sudah ada sebelum dilakukan pull. Cukup jalankangit clone <repo link>
untuk melakukan clone.<repo link>
bisa didapatkan dari penyedia remote repo seperti Gitlab atau Github. - Git Remote - Mengatur remote repo yang terhubung dengan local repo
git remote [-v]
: melihat remote repo apa saja yang sudah terhubung dengan local repogit remote add <name> <repo_link>
: menambahkan remote repo untuk terhubung dengan local repogit remote remove <name>
: Menghapus remote repo dari local repo - Git Add - Menambahkan berkas ke local repo
git add <file>
: menambahkan berkas bernama<file>
ke git staginggit add .
ataugit add --all
: menambahkan semua berkas yang belum terlacak atau berubah ke staging - Git Pull - Mengambil commit dari remote repo
git pull <nama remote> <nama cabang>
: untuk mengambil commit dari lokasi remote repo dan cabang spesifik - Git Push - Mengirim commit ke remote repo
Kebalikan darigit pull
, yaitu mengirim commit ke remote repo. Bisa ditambahkan anotasigit push <nama remote> <nama cabang>
- Git Branch - Melihat cabang pada local repo
git branch -d <nama branch>
: menghapus sebuah cabang lokalgit branch -m <branch lama> <branch baru>
: mengganti nama cabanggit branch -a
: menampilkan seluruh cabang, termasuk local dan remote - Git Checkout - Berpindah cabang
git checkout <nama branch>
: memindahkan working directory ke cabang<nama branch>
git checkout -b <nama branch baru>
: membuat cabang lokal baru dan pindah ke cabang tersebut - Git Stash - Menyimpan commit namun belum diaplikasikan pada cabang
Stash biasa digunakan untuk menyimpan commit yang belum selesai atau masih berupa draft. Setelah memodifikasi beberapa berkas namun belum yakin apakah bisa dianggap final, kita bisa menggunakangit stash
untuk menyimpannya dahulu dan mengerjakan bagian lain yang lebih mendesak. Langkahnya adalah :
1. Simpan commit draft dengan perintahgit stash
. Setelah ini working directory akan kembali ke commit sebelum commit draft.
2. Jika ingin mengaplikasikan stash pada cabang, gunakangit stash apply
3. Jika ingin membuang stash, gunakangit stash pop
- Git Revert - Pembatalan commit
Terkadang kita melakukan kesalahan dengan mengubah & meng-commit kumpulan berkas yang tidak seharusnya diutak-atik. Kita masih bisa mengembalikannya ke commit sebelum kita melakukan kesalahan tersebut dengan perintahgit revert <nama commit>
.<nama commit>
dibuat dalam bentuk hash yang unik sehingga harus dicari dengan menggunakangit log
. - Git Merge - Menggabungkan commit dari cabang ke cabang lain
Dengan memakai perintahgit merge
, kita bisa menggabungkan commit pada cabang tambahan ke cabang utama.
- Git Rebase - ‘Merge’ dari cabang tujuan
Berbeda dengan git merge yang menuliskan kembali hasil commit dari cabang asal ke cabang baru, git rebase memindahkan seluruh commit ke cabang tujuan sehingga jika dilihat seakan-akan seluruh perubahan dilakukan pada cabang tujuan.
Aplikasi Git Flow
Kelompok saya sudah mengaplikasikan git flow pada proyek Smart Office kami. Sayangnya, karena masih pada tahap Sprint 1 sebagian perintah diatas belum sempat digunakan seluruhnya, tetapi kami sudah membagi cabang-cabang menjadi 3 cabang utama (master, staging dan development) :
Kami juga sempat menulis beberapa kode untuk Sprint 1 ini (nama file dipotong karena PO kami mungkin tidak mau terlihat) :
Berikut tulisan saya mengenai Git Flow, semoga bermanfaat dan tunggu tulisan menarik mengenai Software Development dari saya yang lainnya.
Referensi :
- Slide panduan Git PPL 2020
- https://git-scm.com/docs/
- https://www.atlassian.com/git/tutorials/