Menulis pesan commit lewat flag -m memang cepat, tetapi Git punya jalur lain yang lebih nyaman untuk pesan panjang: menjalankan git commit tanpa -m, lalu Git membuka sebuah editor teks untuk kita. Masalahnya, editor yang dibuka secara bawaan sering kali adalah vi — editor yang bagi pemula terasa seperti jebakan karena cara keluarnya tidak terkaan. Pengaturan core.editor mengarahkan Git ke editor yang benar-benar kita kuasai, dan chapter ini mengatur kunci tersebut lalu mengujinya secara nyata, termasuk perilakunya saat editor ditutup tanpa pesan.
Kapan Git Membuka Editor #
Editor tidak hanya dipakai untuk commit. Git membuka editor pada beberapa momen: git commit tanpa -m, penyimpanan pesan merge, rebase interaktif, pembuatan tag beranotasi, hingga perintah git config --edit untuk menyunting konfigurasi. Mekanismenya selalu sama: Git menyiapkan sebuah berkas sementara (untuk commit, lokasinya .git/COMMIT_EDITMSG), membuka editor dengan berkas tersebut, menunggu editor ditutup, lalu membaca kembali isinya sebagai pesan.
Nilai untuk Editor Populer #
Nilai core.editor berupa perintah shell yang menjalankan editor, boleh lengkap dengan flag. Contoh nilai untuk editor yang umum dipakai:
| Editor | Nilai core.editor |
|---|---|
| VS Code | code --wait |
| Vim | vim |
| nano | nano |
| Notepad++ (Windows) | "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -nosession" |
| Notepad (Windows) | notepad |
Flag --wait pada VS Code menyuruh proses code menunggu sampai tab editor ditutup baru keluar — persis perilaku yang Git butuhkan. Nilai Notepad++ di atas memakai kutip karena jalurnya memuat spasi, dan flag -multiInst -nosession membuka instance baru yang bersih agar Git tidak menunggu jendela Notepad++ yang sedang dipakai untuk hal lain. Kita set nilainya dengan cara standar git config yang sudah kita kuasai:
git config --global core.editor "code --wait"Uji Nyata dengan Editor Simulasi #
Untuk melihat mekanismenya dari dekat tanpa editor interaktif, kita pakai trik sandbox: sebuah skrip shell yang berperilaku seperti editor — menerima berkas pesan, menulis pesan tetap ke dalamnya, lalu keluar dengan status sukses. Skrip ini kita simpan sebagai editor-simulasi.sh:
cat > editor-simulasi.sh <<'EOF'
#!/bin/sh
printf 'Latihan membuat repository pertama\n' > "$1"
EOF
chmod +x editor-simulasi.shMari kita bedah isi skrip tersebut:
#!/bin/shmenandai skrip shell standar yang dapat dieksekusi."$1"adalah argumen pertama yang diteruskan Git — jalur berkas pesan (.git/COMMIT_EDITMSG) yang harus diisi editor.printf '...' > "$1"menulis pesan tetap ke berkas tersebut, meniru kita yang mengetik pesan lalu menyimpannya.chmod +xmembuat skrip dapat dieksekusi, syarat agar Git bisa menjalankannya.
Selanjutnya kita arahkan core.editor ke skrip ini, lalu commit tanpa -m:
cd demo-ch9
git init -b main
git config user.name "Budi Santoso"
git config user.email "[email protected]"
git config core.editor "./editor-simulasi.sh"
echo "belajar git" > berkas.txt
git add berkas.txt
git commitOutput yang Dihasilkan:
[main (root-commit) 14ea1e0] Latihan membuat repository pertama
1 file changed, 1 insertion(+)
create mode 100644 berkas.txtCommit tercatat dengan pesan yang ditulis skrip — bukti seluruh mekanisme berjalan. Deretan angka 14ea1e0 adalah identitas commit yang nilainya berbeda di tiap mesin. Kita bisa memastikan subjek pesannya:
git log -1 --format=%sOutput yang Dihasilkan:
Latihan membuat repository pertamaGIT_EDITOR dan Urutan Prioritas #
Sebelum membuka editor, Git mencari nilai dari beberapa sumber secara berurutan: variabel lingkungan GIT_EDITOR lebih dulu, lalu core.editor, lalu VISUAL, lalu EDITOR, dan terakhir penyimpanan bawaan vi. Urutan ini membuat GIT_EDITOR berguna sebagai tombol sekali-pakai: satu commit memakai editor berbeda tanpa mengubah konfigurasi. Editor yang akan dipakai Git juga bisa diperiksa lewat git var GIT_EDITOR:
git var GIT_EDITOROutput yang Dihasilkan:
./editor-simulasi.shSekarang kita timpa untuk satu commit saja dengan GIT_EDITOR yang menunjuk skrip lain, editor-lain.sh, yang isinya serupa tetapi menulis pesan Pesan dari GIT_EDITOR:
echo "perubahan kedua" >> berkas.txt
git add berkas.txt
GIT_EDITOR="./editor-lain.sh" git commitOutput yang Dihasilkan:
[main b413b6c] Pesan dari GIT_EDITOR
1 file changed, 1 insertion(+)Variabel lingkungan hanya berlaku pada satu perintah tersebut; commit berikutnya kembali memakai core.editor.
Bila Editor Ditutup Tanpa Pesan #
Editor yang ditutup tanpa menyimpan pesan bukan galat yang merusak — Git membatalkan commit dengan rapi. Kita uji dengan editor-kosong.sh, skrip yang langsung keluar tanpa menulis apa pun:
git config core.editor "./editor-kosong.sh"
echo "perubahan ketiga" >> berkas.txt
git add berkas.txt
git commitOutput yang Dihasilkan:
Aborting commit due to empty commit message.Commit batal: jumlah commit tetap dua, dan perubahan yang sudah di-staging tetap berada di staging area, siap di-commit ulang. Perilaku yang sama berlaku saat kita membuka editor sungguhan lalu keluar tanpa menulis — kosongnya pesan selalu berarti batal, bukan commit dengan pesan hampa. Teknik menulis pesan yang baik dibahas tuntas pada chapter menulis commit message ; konfigurasi editor di sini hanya memastikan prosesnya nyaman.
Identitas dan editor kini siap, dan git init berikutnya akan menyimpan kejutan kecil bernama hint tentang branch master — kejutan yang kita tuntaskan pada chapter berikutnya.