การเพิ่ม multiple config ใน ssh

โจทย์

ตอนนี้ผมมี account 2 อันที่ใช้ github.com
1. ของส่วนตัว
2. ของบริษัท
ปัญหาคือ ทั้ง 2 account ชี้ไปที่ github.com
ผมต้องการแยก

วิธีแก้ปัญหา

ต้องแก้ 2 ที่
1. แก้ที่ ~/.ssh/config ให้ตั้งชื่อ hostname ไม่ซ้ำ และใช้ User git เท่านั้น
2. แก้ที่ project คือ your-project/.git/config ให้ replace จาก
https://github.com/mynameiskreang/basic-golang.git เป็น
git@github_mynameiskreang:mynameiskreang/basic-golang.git

Step 1 ~/.ssh/config
Step 2

ถ้าอธิบายให้ลึกขึ้น ก็คือ การเปลี่ยน protocol จาก https เป็น git และกำหนด username

What is a URL? - Learn web development | MDN
อันนี้ standard pattern

และถ้าถามว่าทำไมถ้าตา pattern ไม่เหมือน standard ก็เพราะ git มี package เป็นของตัวเอง
เช่น git clone https หรือ ssh
ref git protocol, stackoverflow

คำถามต่อมาคือ แล้วมันเกี่ยวกับ ssh อย่างไร ทำงานอย่างไร?

ปกติเราจะใช้คำสั่ง ssh Host เช่น ssh github_mynameiskreang หรือ ssh root@domain.com

ทีนี้ใช้คำสั่ง git fetch git@github_mynameiskreang:mynameiskreang/basic-golang.git
ตรง github_mynameiskreang ก็จะไป map กับใน ~/.ssh/config ให้เอง (ด้วยความสามารถ git protocol)

ถ้าสังเกตตอน clone ก็จะพบว่า จริงๆแล้ว git protocol ใช้ได้ทั้งบน https และ ssh

Refs

https://superuser.com/questions/366649/ssh-config-same-host-but-different-keys-and-usernames
https://stackoverflow.com/questions/33846856/what-exactly-is-the-git-protocol
https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols#The-Git-Protocol