Jitrak Blog

Manage multiple Git account in machine

จัดการ Git หลาย Account ในเครื่องเดียว

01 Oct 2023 16:00

Written by: Yosapol Jitrak

Git config
Tags:

Git

SSH key

ปัจจุบันการใช้งาน Git เป็น Version control ถือว่าเป็นเรื่องปกติของการทำ Software เป็นที่เรียบร้อยแล้ว หลายคนใช้คอมพิวเตอร์เครื่องเดียวทำทุกอย่าง ทั้งงานที่บริษัท และใช้งานส่วนตัว ซึ่งการใช้งาน Git อาจจะมีทั้ง Account ของบริษัท และ Account ส่วนตัวที่ทำ Project ส่วนตัว รวมถึงอาจจะเอาไว้ช่วย Contribute Open source project ต่าง ๆ ยิ่งข่วงนี้เป็นเทสกาล Hacktoberfest ซึ่งปีนี้จัดเป็นปีที่ 10 แล้ว จึงอยากจะแนะนำวิธีการจัดการ Git หลาย Account ในเครื่องเดียวกัน ซึ่งจะมีหลายวิธี

Managing multiple accounts จาก GitHub doc

Managing multiple accounts ซึ่งดูวิธีการแล้วดูไม่ตอบโจทย์เท่าไหร่ โดยเฉพาะการแยก Protocal สำหรับแต่ละ Account อันนึงใช้ HTTPS อันนึงใช้ SSH ยุคนี้แล้วยังไงก็ควรใช้ SSH แทน HTTPS แล้ว

แก้ SSH config โดยใช้ชื่อ Host ที่ต่างกัน

Multiple GitHub accounts on the same computer? วิธีนี้เป็นวิธีดั้งเดิมที่ใช้กันมานานแล้ว แต่วิธีนี้จะมีข้อเสียคือต้องมาคอยแก้ชื่อ Host ตอน Clone หรือ Set origin ซึ่งผมจะไม่กล่าวถึงในบทความนี้เช่นกัน เพราะมีวิธีที่ดีกว่านั้น

ใช้ Git config แยกตาม Directory

8 Easy Steps to Set Up Multiple GitHub Accounts [cheat sheet included] วิธีนี้ดูเป็นวิธีที่น่าจะโอเคที่สุดของผมตอนนี้แล้วครับ เรามาดูวิธีการกันครับ

1. สร้าง SSH key สำหรับแต่ละ Account

# SSH key สำหรับ Git account ส่วนตัว
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_personal

# SSH key สำหรับ Git account ทำงาน
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_work

2. เพิ่ม SSH key ลงใน GitHub account

# Copy public key
cat ~/.ssh/id_ed25519_personal.pub | pbcopy

เข้าไปที่ GitHub > Settings > SSH and GPG keys > New SSH key แล้วใส่ชื่อ Key และ Public key ที่ Copy ไว้ และทำแบบเดียวกันกับ Work account

3. สร้าง Config Git สำหรับแต่ละ Git account

### สร้าง File สำหรับ Git account ส่วนตัว
touch ~/.git-personal
### สร้าง File สำหรับ Git account ทำงาน
touch ~/.git-work

ตัวอย่างเนื้อหาของไฟล์ .git-personal

[user]
email = [email protected]
name = Yosapol Jitrak

[github]
user = "Eji4h"

[core]
sshCommand = "ssh -i ~/.ssh/id_ed25519_personal"

ทำอย่างเดียวกันกับ .git-work แต่เปลี่ยน Setting เป็นของ Work account

4. สร้าง Config สำหรับ Git

touch ~/.gitconfig

เสร็จแล้วเปิดไฟล์ .gitconfig ขึ้นมาแล้วใส่ Config ตามนี้

[includeIf "gitdir:~/"] # include for all .git projects under personal/
path = ~/.git-personal

[includeIf "gitdir:~/works/"] # include for all .git projects under work/
path = ~/.git-work

เงื่อนไขวิธีนี้คือเราจะต้องอยู่ให้ถูก Working directory ตามเงื่อนไข includeIf จะดึง Config จาก Path มา Override ทับ เพื่อจัดการกับ Git account ที่เราต้องการ และเมื่อเราอยู่ใน Working directory แล้วเราสามารถใช้คำสั่ง Git ได้ปกติเลยครับ ไม่ต้องคอยแก้ไขชื่อ Host หรืออะไรทั้งนั้น

จบไปแล้วครับสำหรับบทความนี้ หวังว่าจะเป็นกับคนที่ใช้คอมพิวเตอร์เครื่องเดียว แต่่จะต้องจัดการกับ Git account หลาย ๆ Acount วิธีการนี้สามารถใช้ได้กับผู้ให้บริการ Git เจ้าอื่นด้วยนะครับ ไม่จำเป็นจะต้องเป็น GitHub เพียงอย่างเดียวนะครับ