Gitflow #
Dalam pengembangan software modern, Git bukan sekadar alat version control, tetapi fondasi utama kolaborasi tim. Namun, Git tanpa aturan workflow sering berujung pada konflik branch, commit yang berantakan, dan proses rilis yang kacau. Di sinilah Gitflow hadir sebagai salah satu workflow paling populer dan terstruktur.
Artikel ini akan membahas:
- Apa itu Gitflow
- Konsep dan struktur branch Gitflow
- Alur kerja Gitflow secara end-to-end
- Kelebihan dan kekurangan Gitflow
- Best practices Gitflow di dunia nyata
- Kapan Gitflow cocok dan kapan tidak
Apa Itu Gitflow? #
Gitflow adalah branching model yang diperkenalkan oleh Vincent Driessen untuk mengelola siklus hidup pengembangan software secara rapi dan terprediksi.
Gitflow memisahkan:
- Pengembangan fitur
- Perbaikan bug
- Persiapan rilis
- Maintenance produksi
ke dalam branch yang jelas dan memiliki tujuan spesifik.
Intinya: Gitflow = disiplin struktur + alur rilis yang konsisten.
Struktur Branch dalam Gitflow #
Gitflow memiliki dua branch utama permanen dan beberapa branch temporer.
1️⃣ main (atau master)
#
- Berisi kode produksi
- Setiap commit di
mainmerepresentasikan versi rilis - Biasanya diberi tag versi (
v1.0.0,v1.1.0)
❗ Tidak boleh commit langsung ke main
2️⃣ develop
#
- Branch utama untuk development aktif
- Semua fitur baru akan digabung ke sini
- Menjadi dasar pembuatan branch
release
📌 Anggap develop sebagai next production
3️⃣ feature/*
#
Digunakan untuk mengembangkan fitur baru.
Contoh:
feature/login-google
feature/payment-integration
Karakteristik:
- Dibuat dari
develop - Digabung kembali ke
develop - Dihapus setelah selesai
4️⃣ release/*
#
Digunakan untuk persiapan rilis.
Contoh:
release/1.2.0
Fungsi:
- Finalisasi fitur
- Bug fixing ringan
- Update versi & changelog
Setelah selesai:
- Merge ke
main - Merge kembali ke
develop - Beri tag versi
5️⃣ hotfix/*
#
Digunakan untuk perbaikan bug kritikal di production.
Contoh:
hotfix/1.2.1
Karakteristik:
- Dibuat dari
main - Langsung memperbaiki issue production
- Merge ke
maindandevelop
Diagram Alur Gitflow #
main ───────────────●─────────────●────────────
\ /
\ hotfix /
●────────●
develop ───●────●────●────●────●──────
\ \ /
\ feature /
●──────────●
\
release
●────●
Alur Kerja Gitflow (Step-by-Step) #
🧩 1. Mengembangkan Fitur Baru #
Buat branch dari
developgit checkout -b feature/user-profile developKerjakan fitur
Merge ke
developHapus branch feature
🚀 2. Menyiapkan Rilis #
Buat branch rilis dari
developgit checkout -b release/1.3.0 developFix bug minor
Update versi & dokumentasi
Merge ke
maindandevelopTag rilis
🚑 3. Hotfix Production #
Buat branch dari
maingit checkout -b hotfix/1.3.1 mainFix bug kritikal
Merge ke
maindandevelopTag patch version
Kelebihan Gitflow #
✅ Struktur branch sangat jelas ✅ Cocok untuk tim besar ✅ Rilis terkontrol dan terprediksi ✅ Mendukung multiple version maintenance
Kekurangan Gitflow #
❌ Kompleks untuk tim kecil ❌ Terlalu berat untuk CI/CD cepat ❌ Banyak merge = overhead ❌ Tidak ideal untuk deployment harian
Gitflow vs Workflow Lain #
| Workflow | Cocok Untuk | Catatan |
|---|---|---|
| Gitflow | Enterprise, release-based | Struktur kuat |
| GitHub Flow | Startup, CI/CD cepat | Simple |
| Trunk-Based | High-frequency deploy | Disiplin tinggi |
Best Practices Gitflow #
✅ 1. Lindungi Branch Penting #
- Gunakan branch protection
- Wajib PR & review
- Larang direct push ke
main&develop
✅ 2. Gunakan Semantic Versioning #
MAJOR.MINOR.PATCH
Contoh:
1.2.0→ fitur baru1.2.1→ bugfix
✅ 3. Feature Branch Harus Kecil #
- Hindari feature terlalu lama
- Break down fitur besar
✅ 4. Selalu Merge Balik ke Develop #
Terutama untuk:
hotfixrelease
Agar tidak terjadi version drift.
✅ 5. Automasi dengan CI/CD #
- Test otomatis di
featuredandevelop - Deploy otomatis dari
main - Tag-based deployment
✅ 6. Konsisten Naming Convention #
feature/<scope>
release/<version>
hotfix/<version>
Kapan Gitflow Cocok Digunakan? #
Gitflow cocok jika:
- Tim cukup besar
- Release berbasis versi
- Maintenance banyak versi
- Stabilitas lebih penting dari kecepatan
❌ Hindari Gitflow jika:
- Startup early-stage
- Continuous deployment harian
- Tim < 5 orang
Deployment ke Production: Tag vs main/master
#
Ini adalah salah satu area yang paling sering menimbulkan perdebatan, terutama bagi engineer yang pernah bekerja di perusahaan dengan workflow berbeda.
Banyak engineer (dan bahkan perusahaan) melakukan deployment langsung dari branch main/master. Praktik ini tidak selalu salah, tetapi berbeda konteks dengan Gitflow.
Prinsip Dasar Gitflow #
Dalam Gitflow:
main/mastermerepresentasikan history production- Tag merepresentasikan versi rilis yang dideploy
Artinya: production seharusnya dideploy dari TAG, bukan sekadar branch.
Kenapa Bukan Langsung dari main/master?
#
Branch bersifat mutable:
- Commit bisa ditambah
- History bisa berubah (revert, hotfix, merge ulang)
Sementara tag bersifat immutable:
- Tidak berubah
- Bisa di-deploy ulang kapan pun
- Aman untuk audit dan rollback
Contoh:
main
├─ commit A (tag: v1.3.0) ✅ deployed
├─ commit B (tag: v1.4.0) ✅ deployed
└─ commit C (tag: v1.4.1) ✅ deployed
Yang dideploy ke production adalah:
v1.4.1
Bukan:
main@HEAD
Workflow Gitflow yang Benar untuk Production #
release/1.4.0
↓ merge
main ──●── tag v1.4.0 ──▶ DEPLOY PROD
Langkah ideal:
- Merge
release/*kemain - Buat annotated tag (
v1.4.0) - CI/CD deploy berdasarkan tag
Kenapa Banyak Company Deploy dari main/master?
#
Biasanya karena mereka:
- Tidak pakai Gitflow murni
- Menggunakan GitHub Flow atau Trunk-Based Development
- Fokus ke continuous deployment
Dalam konteks itu:
main= production-ready setiap saat- Setiap merge = kandidat deploy
⚠️ Masalah muncul ketika:
- Mengaku pakai Gitflow
- Tapi deploy langsung dari
main
Ini menciptakan false sense of Gitflow.
CI/CD Best Practice (Recommended) #
Trigger deployment berdasarkan tag:
on:
push:
tags:
- 'v*.*.*'
Keuntungan:
- Deploy eksplisit (bukan implicit)
- Rollback jelas
- Traceability tinggi
Ringkasan Cepat #
| Praktik | Cocok untuk Gitflow? | Aman untuk Prod |
|---|---|---|
Deploy dari develop | ❌ | ❌ |
Deploy dari main tanpa tag | ⚠️ | ⚠️ |
Deploy dari main + tag | ✅ | ✅ |
| Deploy dari tag saja | 🔥 | 🔥 |
Kesimpulan #
Gitflow memberikan kontrol dan stabilitas, tetapi hanya jika dijalankan secara konsisten.
Jika Anda pernah berada di company yang deploy langsung dari main/master, kemungkinan besar:
- Mereka tidak sepenuhnya menggunakan Gitflow, atau
- Mereka sengaja memilih workflow lain
Gitflow bukan soal banyaknya branch, tapi soal disiplin rilis dan versi.
Pilih workflow berdasarkan:
- Ukuran tim
- Frekuensi rilis
- Kebutuhan audit & rollback
Bukan sekadar ikut tren.