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:

EditorNilai core.editor
VS Codecode --wait
Vimvim
nanonano
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:

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

bash
cat > editor-simulasi.sh <<'EOF'
#!/bin/sh
printf 'Latihan membuat repository pertama\n' > "$1"
EOF
chmod +x editor-simulasi.sh

Mari kita bedah isi skrip tersebut:

  1. #!/bin/sh menandai skrip shell standar yang dapat dieksekusi.
  2. "$1" adalah argumen pertama yang diteruskan Git — jalur berkas pesan (.git/COMMIT_EDITMSG) yang harus diisi editor.
  3. printf '...' > "$1" menulis pesan tetap ke berkas tersebut, meniru kita yang mengetik pesan lalu menyimpannya.
  4. chmod +x membuat skrip dapat dieksekusi, syarat agar Git bisa menjalankannya.

Selanjutnya kita arahkan core.editor ke skrip ini, lalu commit tanpa -m:

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

Output yang Dihasilkan:

text
[main (root-commit) 14ea1e0] Latihan membuat repository pertama
 1 file changed, 1 insertion(+)
 create mode 100644 berkas.txt

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

bash
git log -1 --format=%s

Output yang Dihasilkan:

text
Latihan membuat repository pertama

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

bash
git var GIT_EDITOR

Output yang Dihasilkan:

text
./editor-simulasi.sh

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

bash
echo "perubahan kedua" >> berkas.txt
git add berkas.txt
GIT_EDITOR="./editor-lain.sh" git commit

Output yang Dihasilkan:

text
[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:

bash
git config core.editor "./editor-kosong.sh"
echo "perubahan ketiga" >> berkas.txt
git add berkas.txt
git commit

Output yang Dihasilkan:

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