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:

bash
cd demo-ch8
git config user.name

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

bash
git config user.name
git config --get user.name

Bentuk --get adalah gaya eksplisit yang sering dipakai di skrip, karena namanya jelas menyatakan niat membaca. Untuk melihat seluruh pengaturan yang aktif sekaligus, gunakan --list:

bash
git config --list

Output yang Dihasilkan:

text
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
user.name=Budi Santoso

Empat 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 nilai memakai pola git config <kunci> <nilai>:

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

ini
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[user]
	name = Budi Santoso

Menghapus nilai memakai --unset:

bash
git config --unset user.name

Perintah 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 statusArti
0Perintah berhasil
1Kunci 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:

LevelFlagBerkasCakupan
system--system/etc/gitconfigSemua pengguna pada satu komputer
global--global~/.gitconfigSemua repository milik satu pengguna
local--local (bawaan saat menulis).git/configSatu 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:

bash
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.name

Output yang Dihasilkan:

text
Budi Proyek

Nilai local menang meski dua level lain juga menyimpan kunci yang sama. Asal nilai yang terpilih bisa dilacak dengan --show-scope dan --show-origin:

bash
git config --show-scope --show-origin user.name

Output yang Dihasilkan:

text
local	file:.git/config	Budi Proyek

Sekarang kita hapus nilai local dan lihat prioritas bergeser ke global:

bash
git config --unset user.name
git config user.name

Output yang Dihasilkan:

text
Budi Santoso

Hapus pula nilai global — nilai system yang tersisa kini menjadi yang berlaku:

bash
git config --global --unset user.name
git config user.name

Output yang Dihasilkan:

text
Budi Sistem

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

bash
git config --show-scope --show-origin --list

Output yang Dihasilkan:

text
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 Proyek

Jalur 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.