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:
[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:3128Anatomi berkas tersebut dapat kita petakan sebagai berikut:
| Elemen | Contoh di berkas | Perannya |
|---|---|---|
| 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 nilai | name = Budi Santoso | Satu pengaturan; kunci di kiri, nilai di kanan tanda sama dengan |
| Subkunci | defaultBranch di bawah [init] | Kunci dengan titik sebagai pembaca: init.defaultBranch |
Baris kosong dan # | pemisah antar blok | Hanya 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:
git config --file contoh-gitconfig --listOutput yang Dihasilkan:
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:3128Perhatikan 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:
# ~/.gitconfig
[include]
path = ~/.gitconfig-umum
[includeIf "gitdir:~/kerja/"]
path = ~/.gitconfig-kerja# ~/.gitconfig-umum — identitas dan pengaturan umum
[user]
name = Budi Santoso
email = [email protected]
[init]
defaultBranch = main# ~/.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:
cd ~/pribadi/proyek-omega
git config user.emailOutput yang Dihasilkan:
Repository di luar ~/kerja/ menerima identitas umum. Kini pindah ke repository di dalamnya:
cd ~/kerja/proyek-alpha
git config user.emailOutput 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:
git config --show-origin --listOutput yang Dihasilkan:
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=trueJalur 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:
git config --show-origin user.emailOutput yang Dihasilkan:
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.