ตั้งค่า Git: git config ชื่อ อีเมล และคีย์ SSH
การตั้งค่า Git พื้นฐานคือคำสั่ง git config --global user.name และ git config --global user.email ซึ่งลงชื่อคอมมิตของคุณ พร้อมเลือกบรรณาธิการและบรานช์เริ่มต้น หากต้องการเข้า GitHub โดยไม่ใช้รหัสผ่าน ให้สร้างคีย์ด้วย ssh-keygen -t ed25519 เพิ่มคีย์สาธารณะในการตั้งค่าบัญชี แล้วทดสอบด้วย ssh -T git@github.com
ตั้งค่า Git ขั้นต่ำในหนึ่งนาที
หลังติดตั้งให้รันสี่คำสั่งนี้ทันที สองคำสั่งแรกขาดไม่ได้ เพราะหากไม่มีจะคอมมิตไม่ได้ ส่วนอีกสองคำสั่งช่วยหลีกเลี่ยงความไม่สะดวกทั่วไป
git config --global user.name "Anna Smirnova"
git config --global user.email "anna@example.com"
git config --global init.defaultBranch main
git config --global core.editor "code --wait"
ตรวจผลลัพธ์:
$ git config --global --list
user.name=Anna Smirnova
user.email=anna@example.com
init.defaultbranch=main
core.editor=code --wait
ต่อไปจะอธิบายว่าแต่ละการตั้งค่าทำอะไร Git เก็บไว้ที่ไหน และเชื่อมการเข้า GitHub ด้วย SSH อย่างไร
git config ทำงานอย่างไร: สามระดับการตั้งค่า
คำสั่ง git config อ่านและเขียนพารามิเตอร์ในไฟล์ใดไฟล์หนึ่งจากสามไฟล์ ระดับที่แคบกว่าจะแทนที่ระดับที่กว้างกว่า
| ระดับ | แฟล็ก | ไฟล์ | มีผลกับ |
|---|---|---|---|
| ระบบ | --system | /etc/gitconfig (บน Windows อยู่ในโฟลเดอร์ติดตั้ง Git) | ผู้ใช้ทุกคนในเครื่อง |
| โกลบอล | --global | ~/.gitconfig หรือ ~/.config/git/config | รีโพทั้งหมดของคุณ |
| โลคัล | --local (ค่าเริ่มต้น) | .git/config ภายในรีโพ | เฉพาะรีโพนี้ |
การตั้งค่าส่วนตัวส่วนใหญ่ควรตั้งแบบโกลบอล ส่วนข้อยกเว้นตั้งแบบโลคัล เช่น อีเมลทำงานสำหรับโปรเจกต์ของบริษัท ให้ตั้งภายในรีโพนั้นโดยไม่ใส่ --global
คำสั่ง git config ที่มีประโยชน์
git config user.email # แสดงค่าปัจจุบัน
git config --list --show-origin # การตั้งค่าทั้งหมดและไฟล์ที่มาของแต่ละค่า
git config --global --edit # เปิด ~/.gitconfig ในบรรณาธิการ
git config --global --unset core.editor # ลบพารามิเตอร์
แฟล็ก --show-origin เป็นตัวช่วยที่ดีที่สุดตอนดีบั๊ก มันชี้ว่าทำไมอีเมลของคุณ "ไม่ถูกต้อง" โดยบอกไฟล์ที่ค่านั้นมาจาก
ชื่อและอีเมล: ทำไมไม่ใช่เรื่องของพิธีการ
ทุกคอมมิตเก็บชื่อและอีเมลของผู้เขียนไว้ตลอดไป ชื่อและอีเมลนี้ไม่ใช่ล็อกอินหรือรหัสผ่าน และ Git ไม่ได้ตรวจสอบ แต่ GitHub และ GitLab ใช้อีเมลเชื่อมคอมมิตกับบัญชีของคุณ หากอีเมลไม่ตรงกับอีเมลที่ยืนยันแล้วในโปรไฟล์ใดเลย คอมมิตจะไม่ถูกนับในกราฟกิจกรรม และจะแสดงโดยไม่มีรูปโปรไฟล์
การเปลี่ยนชื่อหรืออีเมลย้อนหลังโดยไม่เขียนประวัติใหม่ทำไม่ได้ ดังนั้นตรวจการตั้งค่าก่อนคอมมิตแรก
ซ่อนอีเมลจริง
หากรีโพเป็นสาธารณะ อีเมลของคุณจะเห็นได้สำหรับทุกคนที่ดูประวัติ GitHub เสนอที่อยู่สำหรับบริการในรูปแบบ ID+username@users.noreply.github.com (ในการตั้งค่า Emails) ให้ตั้งที่อยู่นี้ใน Git:
git config --global user.email "12345678+anna@users.noreply.github.com"
อีเมลแยกสำหรับงานและโปรเจกต์ส่วนตัว
หากไม่อยากตั้งค่าทุกรีโพงานด้วยมือ ให้ใช้การโหลดคอนฟิกแบบมีเงื่อนไข ใน ~/.gitconfig:
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work
และใน ~/.gitconfig-work:
[user]
email = anna@company.com
ตอนนี้ทุกรีโพใน ~/work/ จะใช้อีเมลงานโดยอัตโนมัติ เครื่องหมายสแลชท้ายพาธจำเป็นต้องมี
การตั้งค่า Git อื่น ๆ ที่มีประโยชน์
บรรณาธิการ
Git เปิดบรรณาธิการสำหรับข้อความคอมมิต interactive rebase และการ merge ค่าเริ่มต้นมักเป็น Vim ตัวเลือกอื่น:
git config --global core.editor "code --wait" # VS Code
git config --global core.editor "nano" # Nano
git config --global core.editor "subl -n -w" # Sublime Text
บรานช์เริ่มต้น
init.defaultBranch main กำหนดชื่อบรานช์แรกของรีโพใหม่ (มีตั้งแต่ Git 2.28) หากไม่ตั้ง Git จะสร้าง master และแสดงคำแนะนำให้เปลี่ยนชื่อ
การขึ้นบรรทัดใหม่
git config --global core.autocrlf true # Windows
git config --global core.autocrlf input # macOS และ Linux
วิธีนี้ทำให้รีโพเก็บการขึ้นบรรทัดใหม่แบบ LF เสมอ และในทีมจะไม่มี "การเปลี่ยนแปลง" ทุกบรรทัดของไฟล์โดยไม่จำเป็น
พฤติกรรมของ git pull
หากไม่กำหนดกลยุทธ์ Git รุ่นใหม่จะขอให้เลือกเองเมื่อบรานช์แยกทางกัน เลือกหนึ่งแบบ:
git config --global pull.rebase false # merge (ค่าเริ่มต้น)
git config --global pull.rebase true # rebase ให้ประวัติเป็นเส้นตรง
git config --global pull.ff only # เฉพาะ fast-forward มิฉะนั้นเกิดข้อผิดพลาด
ชื่อไฟล์ภาษาไทยและสี
git config --global core.quotepath false
git config --global color.ui auto
Alias
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.lg "log --oneline --graph --decorate --all"
git config --global alias.last "log -1 HEAD"
ตอนนี้ git lg แสดงกราฟของบรานช์ และ git last แสดงคอมมิตล่าสุด
หน้าตาของ ~/.gitconfig หลังการตั้งค่า
[user]
name = Anna Smirnova
email = anna@example.com
[init]
defaultBranch = main
[core]
editor = code --wait
autocrlf = input
quotepath = false
[pull]
rebase = false
[alias]
st = status
lg = log --oneline --graph --decorate --all
นี่คือไฟล์ข้อความธรรมดา แก้ไขด้วยมือได้ และย้ายไปยังคอมพิวเตอร์เครื่องอื่นได้
Git login: วิธีเข้าสู่ GitHub
Git ไม่มีคำสั่ง git login ซึ่งเป็นกับดักที่มือใหม่เจอบ่อย Git ไม่เก็บ "บัญชี" การยืนยันตัวตนเกิดขึ้นเมื่อติดต่อเซิร์ฟเวอร์ (clone, push, fetch) ผ่านโปรโตคอลใดโปรโตคอลหนึ่งจากสองแบบ
| HTTPS | SSH | |
|---|---|---|
| ที่อยู่ | https://github.com/user/repo.git | git@github.com:user/repo.git |
| การยืนยันตัวตน | โทเคนการเข้าถึง หรือการล็อกอินผ่านเบราว์เซอร์ (Credential Manager) | คู่คีย์ SSH |
| รหัสผ่านบัญชี | ไม่รับตั้งแต่ปี 2021 | ไม่ต้องใช้ |
| เหมาะเมื่อ | Windows ที่ใช้ Git Credential Manager หรือพร็อกซีขององค์กร | macOS, Linux, เซิร์ฟเวอร์, CI |
การเข้าสู่ระบบผ่าน HTTPS
บน Git for Windows และ macOS ที่มี Git Credential Manager การ git push ครั้งแรกจะเปิดหน้าต่างเบราว์เซอร์ให้ล็อกอิน GitHub และบันทึกข้อมูลไว้ในที่เก็บของระบบ อีกทางเลือกคือเครื่องมือทางการ GitHub CLI คำสั่ง gh auth login จะพาผ่านการยืนยันตัวตนและตั้งค่า Git ให้ หากทำด้วยมือ ให้สร้าง Personal access token ในการตั้งค่า GitHub (Developer settings) แล้วพิมพ์โทเคนแทนรหัสผ่าน
SSH สำหรับ Git: ตั้งค่าทีละขั้น
คีย์ SSH เป็นคู่ไฟล์ คีย์ส่วนตัวเก็บไว้กับคุณ ส่วนคีย์สาธารณะให้ GitHub เซิร์ฟเวอร์ตรวจว่าคุณเป็นเจ้าของคีย์ส่วนตัว และจะไม่ถามรหัสผ่านอีก
ขั้นที่ 1: ตรวจว่ามีคีย์อยู่แล้วหรือไม่
ls -la ~/.ssh
หากมี id_ed25519 และ id_ed25519.pub อยู่แล้ว ให้ไปขั้นที่ 3
ขั้นที่ 2: สร้างคีย์
ssh-keygen -t ed25519 -C "anna@example.com"
กด Enter เพื่อบันทึกคีย์ในพาธเริ่มต้น และตั้งพาสเฟรส ซึ่งจะปกป้องคีย์หากแล็ปท็อปถูกขโมย Ed25519 เป็นอัลกอริทึมสมัยใหม่ที่แนะนำ หากระบบเก่าไม่รองรับ ให้ใช้ ssh-keygen -t rsa -b 4096 -C "anna@example.com"
ขั้นที่ 3: เพิ่มคีย์ใน ssh-agent
เอเจนต์เก็บคีย์ที่ปลดรหัสแล้วไว้ในหน่วยความจำ เพื่อไม่ให้ต้องพิมพ์พาสเฟรสทุกครั้งที่ push
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
บน macOS ให้เพิ่มบรรทัดนี้ลงใน ~/.ssh/config เพื่อเก็บพาสเฟรสในคีย์แชน (Keychain):
Host github.com
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
แล้วรัน ssh-add --apple-use-keychain ~/.ssh/id_ed25519
ขั้นที่ 4: เพิ่มคีย์สาธารณะใน GitHub
cat ~/.ssh/id_ed25519.pub
คัดลอกทั้งบรรทัดตั้งแต่ ssh-ed25519 ไปที่ GitHub เลือก Settings → SSH and GPG keys → New SSH key วางคีย์และตั้งชื่อที่เข้าใจได้ เช่น "Laptop 2026" อย่าส่งหรือเผยแพร่ไฟล์ที่ไม่มี .pub เพราะนั่นคือคีย์ส่วนตัว
ขั้นที่ 5: ทดสอบการเชื่อมต่อ
$ ssh -T git@github.com
Hi anna! You've successfully authenticated, but GitHub does not provide shell access.
ในการเชื่อมต่อครั้งแรก SSH จะถามว่าเชื่อถือโฮสต์หรือไม่ ให้เทียบ fingerprint กับที่ GitHub เผยแพร่ในเอกสาร แล้วตอบ yes
ขั้นที่ 6: สลับรีโพไปใช้ SSH
หากโคลนรีโพผ่าน HTTPS ให้เปลี่ยนที่อยู่ของรีโมต:
git remote -v
git remote set-url origin git@github.com:anna/my-project.git
git push
บัญชี GitHub หลายบัญชีบนคอมพิวเตอร์เครื่องเดียว
คีย์ SSH หนึ่งดอกผูกได้กับบัญชี GitHub หนึ่งบัญชีเท่านั้น สำหรับบัญชีงานและบัญชีส่วนตัว ให้สร้างคีย์สองดอกและตั้งชื่อเล่นของโฮสต์ใน ~/.ssh/config:
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
โคลนรีโพงานผ่านชื่อเล่น: git clone git@github-work:company/app.git เมื่อรวมกับ includeIf สำหรับอีเมล คุณจะได้สภาพแวดล้อมงานและส่วนตัวที่แยกขาดจากกันอย่างสมบูรณ์
ข้อผิดพลาดที่พบบ่อยตอนตั้งค่า
"Please tell me who you are"
ยังไม่ได้ตั้ง user.name และ user.email รันคำสั่งจากต้นบทความแล้วลองคอมมิตอีกครั้ง
"Permission denied (publickey)"
GitHub ไม่พบคีย์ที่เหมาะสม ตรวจว่าคีย์ถูกเพิ่มในเอเจนต์ (ssh-add -l) ส่วนสาธารณะถูกเพิ่มในบัญชีแล้ว และดูรายละเอียดด้วย ssh -vT git@github.com
"Support for password authentication was removed"
คุณพิมพ์รหัสผ่านบัญชีขณะทำงานผ่าน HTTPS ให้ใช้โทเคน การล็อกอินผ่าน Credential Manager หรือเปลี่ยนมาใช้ SSH
คอมมิตบน GitHub ไม่มีรูปโปรไฟล์
อีเมลใน git config user.email ยังไม่ได้เพิ่มในโปรไฟล์ GitHub ให้เพิ่มที่ Settings → Emails คอมมิตเก่าจะผูกเข้าบัญชีเองโดยอัตโนมัติ
พอร์ต 22 ถูกปิดในเครือข่าย
GitHub รับ SSH ที่พอร์ต 443 ได้ด้วย ใส่ใน ~/.ssh/config: Host github.com, Hostname ssh.github.com, Port 443
ลำดับการตั้งค่าบนคอมพิวเตอร์เครื่องใหม่
- ติดตั้ง Git และตรวจ
git --version - ตั้ง
user.name,user.email,init.defaultBranchและบรรณาธิการ - ย้ายหรือสร้าง
~/.gitconfigที่มี alias และกลยุทธ์ pull - สร้างคีย์ SSH ใหม่ (ไม่ควรคัดลอกคีย์ส่วนตัวเก่าระหว่างเครื่องหากไม่จำเป็น) แล้วเพิ่มใน GitHub
- ตรวจการเข้าถึงด้วย
ssh -T git@github.comและโคลนรีโพงานผ่านที่อยู่ SSH
การมีคีย์แยกสำหรับแต่ละอุปกรณ์ยังมีข้อดีคือ เมื่อแล็ปท็อปหาย คุณลบคีย์เดียวบน GitHub ได้โดยไม่กระทบการเข้าถึงจากเครื่องอื่น
สรุป
การตั้งค่า Git มีสามขั้น คือ ตั้งชื่อและอีเมลด้วย git config --global เลือกบรรณาธิการ บรานช์เริ่มต้น และกลยุทธ์ pull แล้วเชื่อมการเข้า GitHub ซึ่งง่ายและเชื่อถือได้ที่สุดด้วยคีย์ SSH จำไว้ว่าไม่มีคำสั่ง git login: การยืนยันตัวตนเกิดขึ้นเมื่อติดต่อเซิร์ฟเวอร์ การตั้งค่าและการเข้าถึงผ่าน SSH เราอธิบายอย่างลงมือทำในหลักสูตร Git
คำถามที่พบบ่อย
การตั้งค่า Git บน Windows อยู่ที่ไหน?
ค่าโกลบอลอยู่ในไฟล์ C:\Users\ชื่อของคุณ\.gitconfig ส่วนค่าโลคัลอยู่ใน .git\config ของแต่ละรีโพ ตำแหน่งที่แน่นอนดูได้ด้วย git config --list --show-origin
รีเซ็ตการตั้งค่า Git อย่างไร?
ลบหรือเปลี่ยนชื่อไฟล์ ~/.gitconfig แล้ว Git จะกลับไปใช้ค่าเริ่มต้น หากต้องการลบพารามิเตอร์เดียวใช้ git config --global --unset ชื่อพารามิเตอร์
ใช้คีย์ SSH ดอกเดียวกันได้ทั้ง GitHub และ GitLab หรือไม่?
ได้ เพิ่มคีย์สาธารณะดอกเดียวกันลงในหลายบริการได้ มีข้อจำกัดเดียวคือ บน GitHub คีย์หนึ่งดอกผูกกับบัญชีเดียว
จะเซ็นคอมมิตอย่างไรให้ GitHub แสดงเครื่องหมาย Verified?
ตั้งการเซ็นด้วยคีย์ GPG หรือ SSH เช่น git config --global gpg.format ssh, ตั้ง user.signingkey เป็นพาธของคีย์สาธารณะ และ commit.gpgsign true จากนั้นเพิ่มคีย์บน GitHub ในประเภท Signing key
ต้องตั้งค่า Git ใหม่หลังอัปเดตหรือไม่?
ไม่ต้อง การอัปเดตไม่แตะ ~/.gitconfig และคีย์ใน ~/.ssh การตั้งค่าทั้งหมดยังคงอยู่
หัวข้อนี้สอนอย่างละเอียดพร้อมฝึกปฏิบัติในคอร์ส “Git с нуля до уверенного разработчика”
- Установка и настройка: готовим Git к первому запуску
- GitHub и удалённые репозитории: ваш код в облаке