Published October 14, 2026 by RIT

MENGGANTI DATABASE OTOMATIS PADA GITHOOK



 

Otomatis Mengganti Database CodeIgniter 3 Berdasarkan Git Branch Menggunakan Git Hook

1. Latar Belakang

Saat mengembangkan aplikasi menggunakan Git, saya memiliki dua branch utama:

  • main untuk aplikasi utama atau legacy.

  • metrologi-v2 untuk pengembangan aplikasi versi 2.

Agar pengembangan kedua versi tidak saling mengganggu, saya memisahkan database MySQL menjadi dua database yang berbeda:

Branch GitDatabase MySQL
mainmetrologi1
metrologi-v2metrologi2

Masalahnya, setiap kali berpindah branch, saya harus mengubah konfigurasi database CodeIgniter 3 secara manual melalui file:

application/config/database.php

Contohnya, ketika menggunakan branch main, konfigurasi database harus mengarah ke metrologi1.

'database' => 'metrologi1',

Sedangkan ketika menggunakan branch metrologi-v2, konfigurasi harus diubah menjadi:

'database' => 'metrologi2',

Jika lupa mengganti konfigurasi tersebut, aplikasi dapat terhubung ke database yang salah. Hal ini berisiko, terutama ketika melakukan pengujian atau perubahan data.

Saya kemudian mencari cara agar konfigurasi database dapat berubah secara otomatis ketika berpindah branch Git.

2. Memeriksa Status File Konfigurasi Database

Langkah pertama adalah memeriksa apakah file konfigurasi database dilacak oleh Git.

Perintah yang digunakan:

git ls-files application/config/database.php

Hasilnya kosong.

Selanjutnya, saya memeriksa apakah file tersebut masuk dalam aturan .gitignore:

git check-ignore -v application/config/database.php

Hasilnya menunjukkan:

.gitignore:23:application/config/database.php

Artinya, file application/config/database.php memang diabaikan oleh Git. Konfigurasi database tersebut bersifat lokal dan tidak ikut dilacak sebagai perubahan biasa dalam commit.

Kondisi ini menjadi dasar untuk membuat solusi otomatis tanpa harus memasukkan konfigurasi lokal ke dalam repository.

3. Mengenal Git Hook post-checkout

Git memiliki fitur bernama Git Hooks, yaitu skrip yang dapat dijalankan secara otomatis ketika peristiwa tertentu terjadi.

Salah satunya adalah hook post-checkout.

Hook ini dijalankan setelah proses checkout atau perpindahan posisi Git selesai. Ketika berpindah branch menggunakan git switch, Git menjalankan hook tersebut sehingga skrip dapat memeriksa branch yang sedang aktif.

Lokasi hook pada proyek ini:

.git/hooks/post-checkout

Dengan memanfaatkan hook tersebut, saya dapat menentukan database berdasarkan branch aktif.

Aturan yang digunakan:

  • Jika branch aktif adalah main, gunakan database metrologi1.

  • Jika branch aktif adalah metrologi-v2, gunakan database metrologi2.

  • Jika branch lain aktif, jangan mengubah konfigurasi database secara otomatis.

4. Membuat Git Hook Otomatis

Sebelum membuat hook, saya mencadangkan file konfigurasi database terlebih dahulu.

Perintah PowerShell:

Copy-Item application/config/database.php "$env:USERPROFILE\Desktop\database.php.backup"

Kemudian, dari PowerShell pada folder proyek, saya membuat file hook berikut:

@'
#!/bin/sh

branch="$(git symbolic-ref --quiet --short HEAD 2>/dev/null)" || exit 0

case "$branch" in
    main)
        db="metrologi1"
        ;;
    metrologi-v2)
        db="metrologi2"
        ;;
    *)
        echo "PERINGATAN: Branch '$branch' belum memiliki konfigurasi database otomatis."
        exit 0
        ;;
esac

if [ ! -f application/config/database.php ]; then
    echo "PERINGATAN: File database.php tidak ditemukan."
    exit 1
fi

sed -i "s/'database'[[:space:]]*=>[[:space:]]*'[^']*'/'database' => '$db'/" application/config/database.php

echo "Branch aktif: $branch"
echo "Database aktif: $db"
'@ | Set-Content -Encoding ASCII .git/hooks/post-checkout

Skrip tersebut bekerja melalui beberapa tahapan:

  1. Membaca nama branch aktif menggunakan git symbolic-ref.

  2. Menentukan nama database berdasarkan branch menggunakan case.

  3. Memeriksa apakah file konfigurasi database tersedia.

  4. Mengganti nilai konfigurasi database menggunakan sed.

  5. Menampilkan informasi branch dan database yang dipilih.

Karena penggantian dilakukan hanya pada nilai konfigurasi database, pengaturan koneksi lainnya seperti hostname, username, password, dan driver tidak perlu diubah.

5. Menguji Hasilnya

Setelah hook dibuat, saya menguji perpindahan branch.

Pengujian pertama: berpindah ke main

Perintah:

git switch main

Kemudian memeriksa konfigurasi:

Select-String "'database'" application/config/database.php

Hasil yang diharapkan:

'database' => 'metrologi1',

Pengujian kedua: berpindah ke metrologi-v2

Perintah:

git switch metrologi-v2

Kemudian memeriksa kembali konfigurasi:

Select-String "'database'" application/config/database.php

Hasil yang diharapkan:

'database' => 'metrologi2',

Hasil pengujian menunjukkan bahwa konfigurasi database berhasil berubah mengikuti branch yang aktif.

6. Mengapa Cara Ini Berhasil?

Sebelumnya, saya mengira perpindahan branch Git hanya berkaitan dengan perubahan kode program. Namun, konfigurasi database lokal yang tidak dilacak Git tidak otomatis mengikuti branch.

Git Hook memberikan mekanisme tambahan untuk menjalankan tindakan setelah perpindahan branch selesai.

Dengan demikian, Git tetap mengelola kode sesuai branch, sedangkan hook mengatur pemilihan database lokal.

Solusi ini membantu mengurangi risiko lupa mengganti konfigurasi database ketika berpindah dari aplikasi legacy ke aplikasi V2.

7. Hal yang Perlu Diperhatikan

Ada beberapa hal penting dari penerapan ini:

  1. Database harus benar-benar terpisah. Mengganti nama database pada konfigurasi tidak membuat database baru atau menyalin data secara otomatis.

  2. Git Hook bersifat lokal. File di .git/hooks umumnya tidak ikut tersimpan atau dibagikan melalui commit repository. Jika proyek dipindahkan ke komputer lain, hook perlu dipasang kembali.

  3. Branch lain belum diatur. Dalam implementasi ini, hanya main dan metrologi-v2 yang memiliki pemetaan database.

  4. Perpindahan branch bukan satu-satunya cara mengubah posisi Git. Operasi seperti reset atau rebase tidak selalu memicu hook dengan cara yang sama seperti perpindahan branch. Karena itu, konfigurasi perlu diperiksa setelah operasi Git yang lebih kompleks.

  5. Uji koneksi aplikasi. Pastikan aplikasi benar-benar terhubung ke database yang dimaksud sebelum melakukan operasi yang mengubah data.

  6. Jangan menghapus aturan .gitignore sembarangan. File konfigurasi lokal yang berisi kredensial sebaiknya tidak dimasukkan ke repository tanpa pertimbangan keamanan.

8. Kesimpulan

Dengan memanfaatkan Git Hook post-checkout, saya berhasil mengotomatisasi pergantian konfigurasi database CodeIgniter 3 berdasarkan branch Git.

Hasil akhirnya:

  • Branch main menggunakan database metrologi1.

  • Branch metrologi-v2 menggunakan database metrologi2.

  • Saya tidak perlu lagi mengubah konfigurasi database secara manual setiap berpindah branch.

Solusi sederhana ini menjadi pengingat bahwa Git tidak hanya dapat membantu mengelola versi kode, tetapi juga dapat diintegrasikan dengan skrip lokal untuk mendukung alur kerja pengembangan yang lebih aman dan praktis.

Catatan: Implementasi ini diuji pada lingkungan pengembangan lokal Windows menggunakan PowerShell, Laragon, Git, MySQL, dan CodeIgniter 3.

Comments: