Chapter Konfigurasi Alias
sudah memendekkan perintah harian: git st untuk git status -sb. Tapi ada dua bentuk perluasan yang tidak bisa ditangkap alias sederhana — perintah yang butuh argumen (push ke remote mana? branch apa?) dan perintah yang berisi lebih dari satu langkah. Git membuka dua pintu untuk itu: alias berbentuk fungsi shell, dan skrip terpisah git-* yang ditempatkan di PATH hingga menjadi perintah git sungguhan. Keduanya kita bangun dan pakai nyata di chapter ini.
Alias Sebagai Fungsi Shell dengan Argumen #
Kunci pintu pertama adalah tanda seru (!) di nilai alias — perintah dijalankan oleh shell, bukan oleh Git. Masalahnya satu: Git menempelkan argumen kita di ujung nilai alias, jadi git psur origin menjalankan ... ; f origin — titik duanya nempel di tempat yang salah. Solusi standarnya membungkus logika dalam fungsi lalu memanggilnya:
mkdir -p latihan-alias/toko && cd latihan-alias/toko
git init -b main
git config user.name "Budi Santoso"
git config user.email "[email protected]"
git init --bare ../pusat.git
git remote add origin ../pusat.git
printf 'beranda\n' > README.md
git add README.md
GIT_AUTHOR_DATE="2026-11-11T09:00:00+07:00" GIT_COMMITTER_DATE="2026-11-11T09:00:00+07:00" \
git commit -m "Buat beranda"
git config alias.psur '!f() { git push "${1:-origin}" "${2:-main}"; }; f'
git psurOutput yang Dihasilkan (perintah terakhir):
To ../pusat.git
* [new branch] main -> mainAnatomi nilai aliasnya:
f() { ...; }mendefinisikan fungsi bernamaf— wadah logika.; fdi ujung memanggil fungsi itu; argumen yang Git tempel (origindan semisalnya) jatuh tepat ke pemanggilanfini.${1:-origin}adalah parameter shell dengan nilai bawaan: pakai$1bila diisi,originbila kosong.${2:-main}sama untuk branch.
Hasilnya perintah dua-argumen yang sopan: tanpa argumen mendorong origin main, dengan argumen mengikuti perintah. Kedua bentuknya sudah teruji:
git switch -c fitur-galeri
printf 'galeri\n' > galeri.md
git add galeri.md
GIT_AUTHOR_DATE="2026-11-11T09:10:00+07:00" GIT_COMMITTER_DATE="2026-11-11T09:10:00+07:00" \
git commit -m "Tambah galeri"
git psur origin fitur-galeriOutput yang Dihasilkan (perintah terakhir):
To ../pusat.git
* [new branch] fitur-galeri -> fitur-galeriNilai alias tersimpan di konfigurasi seperti biasa — git config --get alias.psur mengembalikan !f() { git push "${1:-origin}" "${2:-main}"; }; f — jadi ia bisa dibagikan lewat git config -f .gitconfig-tim yang di-include, atau sekadar dicatat di dokumentasi tim.
Perintah Custom: Berkas git-* di PATH #
Pintu kedua lebih berkuasa: berapa pun panjang logikanya, skrip bisa berdiri sebagai perintah git tersendiri. Mekanismenya sederhana: saat mengetik git halo, Git mencari berkas executable bernama git-halo di PATH — mekanisme yang sama dengan yang dipakai Git untuk sub-perintah bawaannya (via direktori eksekusi internal GIT_EXEC_PATH). Kita buat foldernya dan skrip pertamanya:
mkdir -p ../bin
cat > ../bin/git-halo <<'EOF'
#!/bin/sh
# git-halo — perintah git custom: sapamu dulu, lalu lihat status.
echo "Halo! Kita berada di $(git rev-parse --show-toplevel)"
git status -sb
EOF
chmod +x ../bin/git-halo
PATH="$(cd ../bin && pwd):$PATH" git haloOutput yang Dihasilkan (perintah terakhir):
Halo! Kita berada di /home/z/my-project/tutorial-extracted/work/sandbox/hooks-dan-otomasi/latihan-alias/toko
## fitur-galeriJalur pada keluaran Anda menyesuaikan lokasi direktori. Tidak ada registrasi, tidak ada file konfigurasi — nama berkas adalah nama perintah. Git bahkan mengakuinya sebagai warga kelas satu:
PATH="$(cd ../bin && pwd):$PATH" git help -aOutput yang Dihasilkan (bagian akhir):
External commands
haloPerintah custom muncul di bagian External commands dari daftar bantuan. Dalam pemakaian nyata, folder bin/ seperti ini di-clone bersama proyek lalu ditambahkan ke PATH sekali di profil shell — atau dipasang ke ~/.local/bin yang umumnya sudah ada di PATH.
git-siap: Perintah Setup Proyek #
Skrip kedua menunjukkan mengapa pintu ini layak dipakai: git siap menyiapkan repository lengkap — init, konfigurasi identitas, commit pertama — dalam satu perintah, pekerjaan yang tidak mungkin diperas ke satu baris alias:
cat > ../bin/git-siap <<'EOF'
#!/bin/sh
# git-siap — siapkan repository baru siap kerja dalam satu perintah.
# pemakaian: git siap <nama-folder> [pesan-commit-pertama]
set -eu
nama="$1"
pesan="${2:-Commit pertama}"
if [ -e "$nama" ]; then
echo "git-siap: '$nama' sudah ada" >&2
exit 1
fi
git init -b main "$nama"
cd "$nama"
git config user.name "Budi Santoso"
git config user.email "[email protected]"
printf '# %s\n\nProyek baru.\n' "$nama" > README.md
git add README.md
git commit -m "$pesan"
git log --oneline
EOF
chmod +x ../bin/git-siap
cd ..
PATH="$PWD/bin:$PATH" git siap proyek-baru "Mulai proyek baru"Output yang Dihasilkan (perintah terakhir):
Initialized empty Git repository in /home/z/my-project/tutorial-extracted/work/sandbox/hooks-dan-otomasi/latihan-alias/proyek-baru/.git/
[main (root-commit) edeac0f] Mulai proyek baru
1 file changed, 3 insertions(+)
create mode 100644 README.md
edeac0f Mulai proyek baruJalur pada keluaran Anda menyesuaikan lokasi direktori; hash edeac0f berbeda di mesin pembaca. Bagian-bagian pentingnya:
set -eumenghentikan skrip pada perintah gagal (-e) dan variabel tak terdefinisi (-u) — standar minimum skrip sehat yang dibahas lebih lanjut di chapter berikutnya.if [ -e "$nama" ]menolak membuat folder yang sudah ada — gagal cepat dengan pesan jelas.${2:-Commit pertama}kembali memakai nilai bawaan argumen.git log --onelinedi akhir memberi umpan balik bahwa repository benar-benar hidup.
Alias atau Skrip? #
| Kriteria | Alias | Skrip git-* |
|---|---|---|
| Panjang logika | satu-dua baris | berapa pun |
| Argumen | via trik fungsi f() | argumen skrip normal $1..$n |
| Berbagi ke tim | lewat konfigurasi/include | lewat repository atau folder bin/ |
| Pengujian | menjalankan ulang manual | bisa dites seperti program biasa |
| Dokumentasi & komentar | nyaris tidak ada | skrip penuh dengan komentar |
Pembagian pragmatisnya: alias untuk yang diketik puluhan kali sehari (harus pendek dan instan), skrip untuk yang berjalan sesekali tapi berbobot (harus kokoh dan bisa dibaca ulang). Skrip git-siap kita persis keduanya — sekali jalan per proyek, tapi kegagalannya harus jelas.
Dua perintah custom ini masih bekerja pada satu repository dalam satu waktu. Otomasi berikutnya naik skala: seluruh folder proyek sekaligus, berjalan sendiri setiap hari — di sanalah shell script menemukan bentuk paling bergunanya.