Sepanjang section ini kita menumbuhkan pengaturan demi pengaturan: identitas, branch bawaan, editor, alias, line endings, proxy. Semuanya tertulis sebagai baris-baris teks biasa di berkas konfigurasi — bukan basis data tersembunyi — dan itulah kabar baiknya: berkas teks bisa dibaca, disalin untuk dibawa pindah komputer, dimasukkan ke repository, dan dibedah saat ada nilai yang berperilaku aneh. Chapter penutup section ini membedah anatomi berkas ~/.gitconfig, memecahnya menjadi beberapa berkas dengan include, mengaktifkan konfigurasi kondisional dengan includeIf, dan melacak asal setiap nilai saat semuanya sudah bercampur.

Format INI di Baliknya #

Seluruh berkas konfigurasi Git memakai format INI — teks yang dikelompokkan oleh judul section dalam tanda kurung siku. Berikut contoh ~/.gitconfig milik pembelajar yang menuntaskan section ini, dirakit dari sandbox dengan seluruh pengaturan yang sudah kita bahas:

ini
[user]
	name = Budi Santoso
	email = [email protected]

[init]
	defaultBranch = main

[core]
	editor = code --wait
	autocrlf = input

[alias]
	st = status -sb
	lg = log --oneline --graph

[http "https://perusahaan.example.com"]
	proxy = http://proxy-kantor.example.com:3128

Anatomi berkas tersebut dapat kita petakan sebagai berikut:

ElemenContoh di berkasPerannya
Section[user], [alias]Kelompok pengaturan; namanya tidak peka kapital
Subsection[http "https://perusahaan.example.com"]Pembatas dalam section; namanya peka kapital, ditulis dalam kutip
Kunci dan nilainame = Budi SantosoSatu pengaturan; kunci di kiri, nilai di kanan tanda sama dengan
SubkuncidefaultBranch di bawah [init]Kunci dengan titik sebagai pembaca: init.defaultBranch
Baris kosong dan #pemisah antar blokHanya kerapian; diabaikan Git

Penulisan yang menjorok memakai tab hanyalah kebiasaan Git — formatnya bebas menjorok apa pun. Cara menuliskan section dan kunci inilah yang membuat nama lengkap kunci berbunyi user.name, init.defaultBranch, atau http.https://perusahaan.example.com.proxy — nama subsection dengan URL di tengahnya, persis kunci proxy dari chapter sebelumnya. Berkas contoh di atas benar-benar valid; Git meratakannya menjadi kunci-kunci saat dibaca:

bash
git config --file contoh-gitconfig --list

Output yang Dihasilkan:

text
user.name=Budi Santoso
[email protected]
init.defaultbranch=main
core.editor=code --wait
core.autocrlf=input
alias.st=status -sb
alias.lg=log --oneline --graph
http.https://perusahaan.example.com.proxy=http://proxy-kantor.example.com:3128

Perhatikan satu keunikan: nama section dan kunci dilaporkan dengan huruf kecil — init.defaultbranch — karena Git memang menormalkan keduanya ke huruf kecil, sementara hanya subsection yang peka kapital.

Tiga Berkas yang Sama #

Berkas ~/.gitconfig hanyalah satu dari tiga berkas yang dibaca setiap kali Git berjalan; urutan dan prioritasnya sudah kita uji di chapter git config : /etc/gitconfig untuk seluruh pengguna, ~/.gitconfig untuk akun kita, dan .git/config untuk repository aktif — nilai dari berkas yang dibaca belakangan menimpa yang lebih awal. Karena isi ~/.gitconfig berlaku di semua repository, berkas inilah yang paling sering kita kelola, dan dua teknik berikut menjadikannya lebih rapi.

include: Memecah Konfigurasi #

Arahan [include] menyisipkan isi berkas lain seolah ditulis di tempat arahan itu berada. Pola yang lazim: berkas utama tetap kecil, sementara pengaturan yang jarang berubah dipisah — misalnya untuk keperluan backup atau berbagi antar mesin. Sandbox memakai struktur tiga berkas berikut:

ini
# ~/.gitconfig
[include]
	path = ~/.gitconfig-umum

[includeIf "gitdir:~/kerja/"]
	path = ~/.gitconfig-kerja
ini
# ~/.gitconfig-umum — identitas dan pengaturan umum
[user]
	name = Budi Santoso
	email = [email protected]

[init]
	defaultBranch = main
ini
# ~/.gitconfig-kerja — identitas kantor
[user]
	email = [email protected]

Bagian [include] memuat jalur berkas yang disisipkan — tanda ~ diperluas ke HOME, dan jalur relatif dihitung dari lokasi berkas yang memuat arahannya. Baris komentar berawalan # sah di berkas konfigurasi, seperti terlihat di atas.

includeIf: Konfigurasi Kondisional #

Sepupu include yang lebih pintar adalah includeIf: berkas hanya disisipkan bila kondisinya terpenuhi. Kondisi gitdir: pada contoh di atas berbunyi: sisipkan ~/.gitconfig-kerja hanya bila repository aktif berada di bawah direktori ~/kerja/. Hasilnya dua dunia dalam satu akun — kita uji kedua sisi di sandbox:

bash
cd ~/pribadi/proyek-omega
git config user.email

Output yang Dihasilkan:

Repository di luar ~/kerja/ menerima identitas umum. Kini pindah ke repository di dalamnya:

bash
cd ~/kerja/proyek-alpha
git config user.email

Output yang Dihasilkan:

Email kantor menimpa email umum hanya untuk repository di bawah ~/kerja/ — tanpa satu pun perintah git config --local di tiap repository kantor. Ketelitian satu karakter menentukan kecocokan pola: gitdir:~/kerja/ ditutup garis miring sehingga hanya cocok pada batas direktori — direktori ~/kerjadata tidak dianggap cocok, dan repository di dalamnya tetap memakai email umum.

Melacak Asal Setiap Nilai #

Di repository proyek-alpha, nilai-nilai kini datang dari empat sumber sekaligus: dua berkas include, berkas utama, dan konfigurasi local repository. Perintah --show-origin menelusuri semuanya:

bash
git config --show-origin --list

Output yang Dihasilkan:

text
file:/home/z/my-project/tutorial-extracted/work/sandbox/instalasi-dan-konfigurasi/home-include/.gitconfig	include.path=~/.gitconfig-umum
file:/home/z/my-project/tutorial-extracted/work/sandbox/instalasi-dan-konfigurasi/home-include/.gitconfig-umum	user.name=Budi Santoso
file:/home/z/my-project/tutorial-extracted/work/sandbox/instalasi-dan-konfigurasi/home-include/.gitconfig-umum	[email protected]
file:/home/z/my-project/tutorial-extracted/work/sandbox/instalasi-dan-konfigurasi/home-include/.gitconfig-umum	init.defaultbranch=main
file:/home/z/my-project/tutorial-extracted/work/sandbox/instalasi-dan-konfigurasi/home-include/.gitconfig	includeif.gitdir:~/kerja/.path=~/.gitconfig-kerja
file:/home/z/my-project/tutorial-extracted/work/sandbox/instalasi-dan-konfigurasi/home-include/.gitconfig-kerja	[email protected]
file:.git/config	core.repositoryformatversion=0
file:.git/config	core.filemode=true
file:.git/config	core.bare=false
file:.git/config	core.logallrefupdates=true

Jalur berkas pada keluaran menyesuaikan lokasi direktori sandbox di tiap mesin. Setiap baris memuat berkas asal diikuti kunci yang dibaca dari sana — termasuk arahan include.path itu sendiri, yang ikut terlihat sebagai kunci biasa. Nilai user.email muncul dua kali dari dua berkas berbeda, dan yang menang adalah baris terakhir — tepat seperti aturan prioritas berkas. Untuk memastikan dari mana satu nilai tertentu datang, cukup gabungkan --show-origin dengan pembacaan satu kunci:

bash
git config --show-origin user.email

Output yang Dihasilkan:

text
file:/home/z/my-project/tutorial-extracted/work/sandbox/instalasi-dan-konfigurasi/home-include/.gitconfig-kerja	[email protected]

Inilah alat diagnosis paling ampuh untuk kejadian klasik “konfigurasi saya tidak terbaca”: nilai yang tampak salah hampir selalu berasal dari berkas yang tidak kita sangka — local yang lama terlupakan, atau include yang menimpa — dan --show-origin langsung menunjuk berkasnya.

Git kini terpasang dan terkonfigurasi penuh: identitas tercatat, editor siap, branch bawaan main, akhir baris aman, perintah harian berpintasan, dan jaringan terkendali. Konfigurasi adalah meja kerja kita; saatnya membangun karya pertama di atasnya — section berikutnya, Membuat Repository , memulai dari git init yang pertama kali benar-benar kita pahami.