Chapter sebelumnya memakai git config --global seperti kotak hitam: perintahnya dijalankan, nilainya tersimpan, tanpa kita pahami mekanismenya. Sekarang kita buka kotak itu sepenuhnya. git config adalah satu-satunya pintu pengaturan Git — dari identitas, editor, nama branch bawaan, sampai perilaku jaringan — dan perintah ini mengenal tiga aksi dasar (membaca, menulis, menghapus) serta tiga level penyimpanan yang berlapis. Pemahaman utuh tentang git config menjadi fondasi bagi seluruh chapter konfigurasi selanjutnya, jadi kita pelajari dulu mekanismenya sebelum melihat kunci-kunci pengaturan yang populer.
Membaca Nilai Konfigurasi #
Kita mulai dengan repository latihan baru yang belum memiliki pengaturan apa pun di luar bawaannya. Cara membaca satu kunci adalah menyebutkan namanya setelah git config:
cd demo-ch8
git config user.nameNilainya baru muncul setelah kita menulisnya pada bagian berikutnya — untuk sekarang, repository masih kosong pengaturannya. Setelah nilainya ada, dua bentuk perintah berikut ini setara untuk membacanya:
git config user.name
git config --get user.nameBentuk --get adalah gaya eksplisit yang sering dipakai di skrip, karena namanya jelas menyatakan niat membaca. Untuk melihat seluruh pengaturan yang aktif sekaligus, gunakan --list:
git config --listOutput yang Dihasilkan:
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
user.name=Budi SantosoEmpat baris pertama adalah pengaturan internal yang Git tulis sendiri saat repository dibuat; baris terakhir adalah kunci yang kita tambahkan. Setiap baris memuat pasangan kunci=nilai dan menampilkan nilai gabungan dari seluruh berkas konfigurasi yang berlaku — detail level penyimpanan kita bahas setelah ini.
Perilaku yang perlu diingat: membaca kunci yang belum diatur tidak mencetak apa pun, tetapi Git keluar dengan kode status 1. Keheningan ini bisa mengejutkan saat pertama kali ditemui, namun justru berguna — skrip otomasi bisa membedakan “nilainya kosong” dari “kuncinya tidak ada”.
Menulis dan Menghapus Nilai #
Menulis nilai memakai pola git config <kunci> <nilai>:
git config user.name "Budi Santoso"Saat perintah ini dijalankan dari dalam repository, Git menulis ke berkas .git/config milik repository tersebut — level local adalah tujuan bawaan setiap penulisan, tanpa perlu flag tambahan. Isi .git/config setelah perintah di atas terlihat seperti ini:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[user]
name = Budi SantosoMenghapus nilai memakai --unset:
git config --unset user.namePerintah penghapusan yang berhasil tidak mencetak keluaran. Setelahnya, membaca user.name kembali ke perilaku kosong: tidak ada keluaran dan kode status 1. Bila kita menjalankan --unset dua kali, penghapusan kedua gagal dengan kode status 5 — sinyal bahwa kunci yang diminta sudah tidak ada. Tiga kode status ini dirangkum pada tabel berikut:
| Kode status | Arti |
|---|---|
0 | Perintah berhasil |
1 | Kunci tidak ditemukan saat dibaca, atau sudah tidak bernilai |
5 | --unset dijalankan pada kunci yang memang tidak ada |
Tiga Level Penyimpanan #
Git menyimpan konfigurasi pada tiga level yang berlapis, dan flag menentukan level mana yang disentuh:
| Level | Flag | Berkas | Cakupan |
|---|---|---|---|
| system | --system | /etc/gitconfig | Semua pengguna pada satu komputer |
| global | --global | ~/.gitconfig | Semua repository milik satu pengguna |
| local | --local (bawaan saat menulis) | .git/config | Satu repository |
Level system cocok untuk kebijakan administrator TI pada komputer bersama; level global untuk selera pribadi seperti identitas dan alias; level local untuk kebutuhan satu repository, misalnya email khusus proyek kantor. Saat membaca, Git menggabungkan ketiganya, dan bila satu kunci muncul di beberapa level, nilai dari level yang paling spesifik menang: local menimpa global, global menimpa system.
Membuktikan Prioritas di Sandbox #
Kita isi ketiga level dengan nilai user.name yang berbeda, lalu melihat mana yang menang:
git config --system user.name "Budi Sistem"
git config --global user.name "Budi Santoso"
git config --global user.email "[email protected]"
git config --local user.name "Budi Proyek"
git config user.nameOutput yang Dihasilkan:
Budi ProyekNilai local menang meski dua level lain juga menyimpan kunci yang sama. Asal nilai yang terpilih bisa dilacak dengan --show-scope dan --show-origin:
git config --show-scope --show-origin user.nameOutput yang Dihasilkan:
local file:.git/config Budi ProyekSekarang kita hapus nilai local dan lihat prioritas bergeser ke global:
git config --unset user.name
git config user.nameOutput yang Dihasilkan:
Budi SantosoHapus pula nilai global — nilai system yang tersisa kini menjadi yang berlaku:
git config --global --unset user.name
git config user.nameOutput yang Dihasilkan:
Budi SistemRangkaian ini menunjukkan mengapa pola “global untuk umum, local untuk pengecualian” bekerja mulus: pengaturan satu repository cukup ditimpa secara local tanpa menyentuh konfigurasi akun. Seluruh lapisan juga bisa dilihat sekaligus beserta berkas asalnya:
git config --show-scope --show-origin --listOutput yang Dihasilkan:
system file:/home/z/my-project/tutorial-extracted/work/sandbox/instalasi-dan-konfigurasi/sistem.gitconfig user.name=Budi Sistem
global file:/home/z/my-project/tutorial-extracted/work/sandbox/instalasi-dan-konfigurasi/home/.gitconfig user.name=Budi Santoso
global file:/home/z/my-project/tutorial-extracted/work/sandbox/instalasi-dan-konfigurasi/home/.gitconfig [email protected]
local file:.git/config core.repositoryformatversion=0
local file:.git/config core.filemode=true
local file:.git/config core.bare=false
local file:.git/config core.logallrefupdates=true
local file:.git/config user.name=Budi ProyekJalur berkas pada keluaran di atas menyesuaikan lokasi direktori sandbox di masing-masing mesin. Daftar lengkap seluruh kunci yang dikenal Git, beserta arti tiap level penyimpanannya, terdokumentasi pada dokumentasi resmi git config .
Dengan mekanisme baca-tulis-hapus serta tiga level yang kini kita kuasai, menyetel pengaturan apa pun tinggal soal menentukan kunci dan level yang tepat. Pengaturan pertama yang paling terasa manfaatnya sehari-hari adalah core.editor — editor yang dibuka Git setiap kali kita perlu menulis pesan — dan itulah topik chapter berikutnya.