Lewati ke konten utama

Multiple Git Profiles Satu Mesin – Jangan Lagi Push dari Email Salah

Zarvelion Zynji
Penulis
Zarvelion Zynji
Tech enthusiasts (self-proclaimed). Gaming addict (diagnosed). Anime simp (no regrets). I turn my hyperfixations into content—welcome to the chaos.
Daftar isi

Cara Pisahkan Git Identity Work dan Personal di Satu Laptop
#

Remote work udah ngilangin batasan antara mesin kantor dan mesin rumah. Satu laptop, dua akun GitHub, nol ruang untuk error — sampai suatu hari kamu push project weekend dan avatar kerja kamu muncul di commit. Kalau pernah panik amend commit setelah sadar git config --global user.email menunjuk ke you@company.com terus-terusan, guide ini buat kamu.

Solusinya bukan mengingat flag override di setiap git commit. Solusinya adalah bikin Git pilih identity yang tepat otomatis berdasarkan folder mana kamu berada. Inilah setup lengkapnya: SSH keys, SSH config, dan direktif Git includeIf.


Kenapa Global Config Saja Jebakan
#

Git baca konfigurasi dalam urutan: system → global → local. Nilai di ~/.gitconfig (global) menang atas /etc/gitconfig (system), tapi nilai apapun di .git/config repo (local) override semuanya. Kebanyakan developer set satu nama dan email global, terus lupa — sampai punya dua akun.

Scope File Kapan berlaku
System /etc/gitconfig Setiap user di mesin
Global ~/.gitconfig Kamu, di mana pun
Local <repo>/.git/config Satu repository saja

Masalahnya: global terlalu luas dan local terlalu sempit. Kamu butuh sesuatu di tengah — aturan yang bilang “semua di ~/work/ adalah kamu-di-kerja, semua di ~/personal/ adalah kamu-di-rumah.” Itulah yang includeIf sediakan.


Konvensi Folder
#

Pilih dua direktori root dan tempel ke situ:

~/work/       -> semua repository perusahaan
~/personal/   -> semua repository personal / open-source

Setiap repo yang kamu clone masuk ke salah satu. Sisa guide ini asumsi pake pembagian ini.


Step 1 — Buat SSH Keys untuk Setiap Akun
#

Bikin satu ED25519 key per identity GitHub/GitLab:

# Key kerja
ssh-keygen -t ed25519 -C "you@company.com" -f ~/.ssh/id_ed25519_work

# Key personal
ssh-keygen -t ed25519 -C "you@personal.com" -f ~/.ssh/id_ed25519_personal

Tambahkan kedua public keys ke akun GitHub/GitLab masing-masing di Settings → SSH and GPG keys. Kalau sebelumnya pake Personal Access Token (PAT), pindah ke SSH — jadi gak perlu repot token expire.

Load Keys ke SSH Agent
#

ssh-add ~/.ssh/id_ed25519_work
ssh-add ~/.ssh/id_ed25519_personal

# Verifikasi keduanya ter-load
ssh-add -l

Harusnya kelihat dua ED25519 entry, satu per identity file.


Step 2 — Konfigurasi SSH Host Aliases
#

Edit ~/.ssh/config biar Git tahu key mana buat remote mana:

# ~/.ssh/config

Host github-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_work

Host github-personal
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_personal

Kalau kamu juga pake GitLab di kerja, tambah blok serupa dengan HostName gitlab.com.

Clone Pake Alias
#

Alih-alih hostname asli, pake alias:

# Repo kerja
git clone git@github-work:company/project-api.git

# Repo personal
git clone git@github-personal:yourname/side-project.git

SSH alias route setiap koneksi lewat key yang tepat — gak perlu tebak, gak perlu flag -i setiap kali.


Step 3 — Setup includeIf di .gitconfig
#

Ini potongan yang ilang wrong-identity problem. Buka ~/.gitconfig dan tambahin includeIf directives:

# ~/.gitconfig

[includeIf "gitdir:~/work/"]
    path = ~/.gitconfig-work

[includeIf "gitdir:~/personal/"]
    path = ~/.gitconfig-personal

Sekarang bikin setiap identity file:

# ~/.gitconfig-work
[user]
    name = Your Name
    email = you@company.com
# ~/.gitconfig-personal
[user]
    name = Your Name
    email = you@personal.com

Cara kerjanya: kapan pun Git jalan di repo yang path-nya cocok gitdir:~/work/**, dia baca ~/.gitconfig-work di atas global config, override user.name dan user.email. Logic yang sama berlaku buat ~/personal/.

Tips: Kamu juga bisa set config repo-specific di local file, tapi includeIf nghemat kamu dari ngulang git config user.email di setiap clone baru.


Step 4 — Verifikasi Sebelum Commit
#

Jangan percaya — verifikasi. Di dalam repository apapun:

# Cek cepat
git config user.email
git config user.name

# Dump penuh local config
git config --list --local

Kalau email gak cocok dengan akun yang kamu maksud, berhenti — kamu mungkin di folder salah atau pattern includeIf gak match. Pindahkan repo atau fix pattern sebelum commit.

Quick Sanity Script
#

Lempar one-liner ini ke shell prompt atau pre-commit hook kalau mau double-check:

git config user.email | grep -q "company.com" && echo "🔒 Work identity" || echo "🏠 Personal identity"

Common Pitfalls
#

Masalah Solusi
Commits masih tampil email salah Verifikasi path repo cocok pattern gitdir: (trailing slash penting)
SSH prompt passphrase setiap push Jalankan ssh-add (atau pakai ~/.ssh/config dengan AddKeysToAgent yes)
includeIf diabaikan di Git lama Butuh Git >= 2.13; upgrade dengan git --version
Sudah clone pake URL default Ubah remote: git remote set-url origin git@github-work:company/repo.git

FAQ
#

Bisa punya lebih dari dua profiles?
#

Bisa. Tambah lebih banyak includeIf entries — satu per direktori (misal ~/oss/ buat open-source contributions dengan email terpisah). Setiap dapat file ~/.gitconfig-<label> sendiri.

Kalau lupa clone pake SSH alias?
#

URL default git@github.com: pakai default SSH key kamu, yang mungkin salah. Selalu clone pake alias (github-work / github-personal), atau — kalau udah clone — fix remote pake git remote set-url.

Apakah includeIf work dengan GIT_DIR atau worktrees?
#

includeIf "gitdir:" match terhadap working-directory path, jadi worktrees dan setup GIT_DIR mungkin berlaku beda. Test pake git config user.email setelah setup.

Perlu separate GPG signing keys per profile?
#

Gak wajib, tapi recommended kalau perusahaan enforce commit signing. Bikin GPG key per identity, tambahkan ke file gitconfig-<label> yang sesuai di bawah [user] signingkey, dan set [commit] gpgSign = true.

Ini work di Windows?
#

Iya, dengan minor path adjustments. Pakai gitdir:C:/Users/you/work/ (forward slashes) di includeIf. SSH config dan key generation identik di Git Bash atau WSL.


Summary
#

Komponen Fungsi
Dua SSH keys Buktikan identitas kamu ke dua akun GitHub/GitLab berbeda
~/.ssh/config Host aliases Route setiap koneksi ke key yang tepat
includeIf di ~/.gitconfig Set name/email per direktori otomatis
Konvensi folder (~/work/, ~/personal/) Kasih pattern buat includeIf match

Setup sekali, Git pilih identity yang tepat untuk setiap commit — gak ada overhead mental, gak ada lagi amend penuh rasa bersalah.

Terkait


Load Comments