Bat Family Story Time : Git Flow

Ervan Haryadi
5 min readFeb 26, 2020

--

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 perintah git push dan git 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

Git Flow di proyek PPL
Git Flow pada PPL

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 perintah git 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 jalankan git 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 repo
    git remote add <name> <repo_link> : menambahkan remote repo untuk terhubung dengan local repo
    git 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 staging
    git add . atau git 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 dari git pull, yaitu mengirim commit ke remote repo. Bisa ditambahkan anotasi git push <nama remote> <nama cabang>
  • Git Branch - Melihat cabang pada local repo
    git branch -d <nama branch> : menghapus sebuah cabang lokal
    git branch -m <branch lama> <branch baru> : mengganti nama cabang
    git 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 menggunakan git stash untuk menyimpannya dahulu dan mengerjakan bagian lain yang lebih mendesak. Langkahnya adalah :
    1. Simpan commit draft dengan perintah git stash. Setelah ini working directory akan kembali ke commit sebelum commit draft.
    2. Jika ingin mengaplikasikan stash pada cabang, gunakan git stash apply
    3. Jika ingin membuang stash, gunakan git 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 perintah git revert <nama commit>. <nama commit> dibuat dalam bentuk hash yang unik sehingga harus dicari dengan menggunakan git log.
  • Git Merge - Menggabungkan commit dari cabang ke cabang lain
    Dengan memakai perintah git merge, kita bisa menggabungkan commit pada cabang tambahan ke cabang utama.
Git Merge
  • 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.
git rebase

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) :

Git Flow proyek Smart Office (hijau menandakan saya sedang berada di cabang tersebut)

Kami juga sempat menulis beberapa kode untuk Sprint 1 ini (nama file dipotong karena PO kami mungkin tidak mau terlihat) :

Working Directory belum di-stage

Berikut tulisan saya mengenai Git Flow, semoga bermanfaat dan tunggu tulisan menarik mengenai Software Development dari saya yang lainnya.

Referensi :

--

--