code-pull-requestMengenal Git Worktree

Halo! Kamu mau belajar git worktree dari awal banget, mulai teori, konsep, pro cons, use case, sampai implementasi real step-by-step yang lengkap. Saya buatkan panduan super detail ini khusus buat kamu. Semua penjelasan pakai bahasa Indonesia yang mudah dipahami, tapi istilah teknis Git tetap dalam bahasa Inggris (karena itu standar di seluruh dunia).

Saya susun secara terstruktur biar mudah diikuti. Siapkan laptop kamu, Git sudah terinstall (minimal versi 2.5+), dan kita mulai!

1. Teori Dasar Git Worktree

Secara teori, Git dirancang dengan asumsi satu repository = satu working directory (folder tempat kamu edit file). Ini disebut main worktree (pohon kerja utama) yang dibuat saat git init atau git clone.

Git Worktree adalah fitur resmi Git (sejak Git 2.5) yang memungkinkan satu repository memiliki banyak working directory sekaligus. Setiap working directory ini disebut linked worktree (worktree terhubung).

Intinya:

  • Semua worktree berbagi repository yang sama (satu folder .git).

  • Masing-masing worktree punya:

    • HEAD sendiri

    • Index (staging area) sendiri

    • Working files sendiri

  • Perubahan commit di satu worktree langsung terlihat di worktree lain (karena history-nya shared).

Ini berbeda dengan:

  • git clone biasa β†’ duplikasi full repo (boros disk).

  • git stash + git switch β†’ ribet kalau banyak perubahan.

Fitur ini masih dianggap β€œexperimental” di dokumentasi resmi Git, tapi sudah sangat stabil dan dipakai luas di industri.

2. Konsep Kerja di Balik Layar (How It Works)

  • Shared repository: Semua worktree pakai $GIT_DIR yang sama (biasanya folder .git di main worktree).

  • Per-worktree metadata: Tiap linked worktree punya folder di dalam .git/worktrees/<nama-worktree>/ yang menyimpan HEAD, index, dll.

  • File .git di linked worktree: Bukan folder, tapi file teks yang berisi pointer:

  • Ref sharing:

    • Branch, tag, remote refs β†’ shared (sama di semua worktree).

    • HEAD, index β†’ per-worktree (berbeda-beda).

  • Locked worktree: Bisa dikunci supaya tidak bisa di-prune (dihapus otomatis).

Konsep ini membuat worktree ringan dan cepat dibanding clone berkali-kali.

3. Kelebihan (Pros)

Berikut kelebihan utama berdasarkan pengalaman developer dan dokumentasi:

No
Kelebihan
Penjelasan

1

Parallel development tanpa ganggu

Bisa kerja di 2–3 branch sekaligus tanpa stash, commit sementara, atau switch bolak-balik.

2

Hemat ruang disk

Hanya 1 .git (shared), worktree baru hanya copy file yang berbeda (bisa hemat 80–90% dibanding clone).

3

Review PR / hotfix super cepat

Buka PR orang lain di worktree terpisah, tanpa mengganggu kerja utama di main.

4

Cocok untuk AI agents / multi-tasking

Tiap agent punya folder sendiri β†’ tidak saling tabrak.

5

Side-by-side comparison

Bisa jalankan 2 build atau test di 2 folder berbeda sekaligus.

6

Tidak duplikasi fetch/push

git fetch di satu tempat langsung update semua worktree.

4. Kekurangan (Cons) & Gotchas

Tidak ada fitur sempurna. Ini kekurangannya:

No
Kekurangan
Solusi / Catatan

1

Bisa bingung banyak folder

Beri nama folder yang jelas (contoh: feature-auth, hotfix-login).

2

Disk masih bisa membengkak

Tiap worktree punya copy file. Jangan lupa git worktree remove setelah selesai.

3

Beberapa IDE/tool assume single dir

VS Code, IntelliJ, dll biasanya oke, tapi extension tertentu perlu setting ulang.

4

Submodule support belum sempurna

Hindari worktree kalau project banyak submodule.

5

Main worktree tidak bisa dihapus/move

Hanya linked worktree yang bisa.

6

Manual move folder bisa rusak

Harus pakai git worktree move atau git worktree repair.

Best practice: Prune secara rutin (git worktree prune) dan lock worktree kalau di USB/network drive.

5. Use Case / Kasus Penggunaan Real World

Berikut contoh nyata yang paling sering dipakai:

  1. Emergency hotfix (contoh klasik dari docs Git) Sedang coding di feature-big tapi bos minta fix bug di main β†’ buat worktree khusus hotfix.

  2. Review PR teman git worktree add ../pr-123 origin/pr-123 β†’ review tanpa ganggu kerja sendiri.

  3. Parallel feature development Kerja di 2 fitur besar sekaligus (misal frontend + backend).

  4. Machine Learning / Experiment Tiap hyperparameter atau model di branch berbeda β†’ worktree terpisah.

  5. AI Coding Agents (2025–2026 trend) Tiap agent (Claude, Cursor, dll) punya worktree sendiri β†’ tidak saling tabrak context.

  6. Demo / Presentasi Siapkan beberapa fitur di worktree berbeda, tinggal ganti folder saat demo.

  7. Monorepo besar Satu repo besar untuk banyak produk β†’ pakai worktree tiap produk.

6. Implementasi Real Step-by-Step (Praktik Langsung)

Kita praktik bareng. Ikuti persis ya!

Langkah 0: Persiapan (Buat repo contoh)

Langkah 1: Lihat worktree saat ini

Output:

Langkah 2: Buat worktree baru (paling sering dipakai)

Ada beberapa variasi:

a. Buat worktree + branch baru dengan nama sama

b. Buat worktree dengan nama folder berbeda

c. Checkout branch existing (dari remote)

d. Detached HEAD (untuk testing commit tertentu)

e. Orphan branch (kosong total)

Masuk ke folder worktree:

Langkah 3: Kerja di worktree

Edit file, commit seperti biasa. Commit akan muncul di semua worktree.

Langkah 4: Lihat semua worktree

Atau format machine-readable:

Langkah 5: Lock worktree (supaya tidak terhapus otomatis)

Langkah 6: Unlock

Langkah 7: Pindah worktree (move)

Langkah 8: Hapus worktree (paling penting!)

Kalau masih ada perubahan belum di-commit:

Langkah 9: Prune (bersihkan metadata stale)

Langkah 10: Repair (kalau folder dipindah manual)

Tips Tambahan untuk Pemakaian Sehari-hari

  • Letakkan worktree di luar folder repo utama (contoh: ../nama-feature) β†’ lebih rapi.

  • Alias di shell (tambahkan ke ~/.bashrc atau ~/.zshrc):

  • Kalau pakai VS Code: buka folder worktree secara terpisah.

  • Untuk monorepo + bare clone (advanced): git clone --bare dulu, lalu tambah worktree.

Penutup & Latihan

Sekarang kamu sudah paham dari teori sampai praktik git worktree secara lengkap!

Latihan rumah:

  1. Clone repo GitHub kamu.

  2. Buat 3 worktree: main, feature-1, hotfix.

  3. Commit di masing-masing β†’ lihat perubahannya shared.

  4. Hapus semua worktree setelah selesai.

Kalau ada yang kurang jelas, error saat praktik, atau mau contoh kasus spesifik (misalnya dengan submodule, monorepo, atau AI agent), langsung tanya saja ya! Saya bisa bantu debug atau kasih script automation.

Selamat belajar! πŸš€ Sekarang coba jalankan git worktree add pertama kamu dan balas di sini hasilnya. Saya tunggu!

Last updated