บันทึกการจัดการ Git configuration แยกกันในแต่ละ project
ช่วงนี้มีโอกาสได้เข้า project ใหม่ แล้วลูกค้าอนุญาตให้ใช้ laptop เครื่องเดียวกันกับที่ใช้ในบริษัทได้เลย ดูเหมือนจะดีที่ไม่ต้องพก laptop 2 เครื่อง แต่เราติดปัญหาตรงที่ว่า Git configuration ที่มีอยู่ตอนนี้ มัน share กันทั้งเครื่อง หมายความว่าเราไม่สามารถแยก configuration ระหว่าง ส่วนตัว กับ งานลูกค้าได้เลย จริง ๆ มันมีวิธีแก้ง่าย ๆ อยู่คือทุกครั้งที่เข้า project ลูกค้าจะต้องเพิ่มคำสั่ง
$ git config user.email raksit.mantanacharu@company.com
$ git config user.name Raksit Mantanacharu
ซึ่งมันดูน่าเบื่อมาก ๆ ไม่ควรจะต้องมาทำซ้ำ ๆ ดังนั้นเรามาออกแรงแยก configuration กันดีกว่านะ
พูดถึง Git configuration
Git configuration จะถูกเก็บไว้ในรูปแบบของ file โดยที่ file หลักจะอยู่ที่ $HOME/.gitconfig
ซึ่งเราสามารถเพิ่ม configuration ในส่วนนี้เพื่อให้เกิดผลกับทุก project ได้
นั่นหมายความว่าชื่อและ email ของ user ที่ใช้ commit (committer) จะเป็น Earth Raksit
และ raksit.m@ku.th
ทุก project โดยอัตโนมัติ เป็นสาเหตุของปัญหาที่กล่าวไว้ตั้งแต่ต้น
แยก Git configuration
แยก Git configuration ตาม directory ที่เก็บ source code และ version control ออกจากกันก่อน เช่นสร้าง 2 directories คือ Personal
กับ Work
(เหมือนแยกเรื่องส่วนตัวออกจากงาน ฮ่า ๆๆ)
$HOME
│
└───Personal
│ │
│ └───personal-project-1
│ │
│ └───personal-project-2
│
└───Work
│ │
│ └───work-project-1
│ │
│ └───work-project-2
│
สร้าง Git configuration file ในแต่ละ project ตามตัวอย่างก็คือจะได้ $HOME/Personal/.gitconfig
และ $HOME/Work/.gitconfig
$HOME
│
└───Personal
│ │
│ └───.gitconfig
│ │
│ └───personal-project-1
│ │
│ └───personal-project-2
│
└───Work
│ │
│ └───.gitconfig
│ │
│ └───work-project-1
│ │
│ └───work-project-2
│
ปิดท้ายด้วยการแก้ไข Git configuration file หลักอยู่ที่ $HOME/.gitconfig
ให้ทุก project ที่อยู่ในแต่ละ directory ใช้ configuration ตาม file ที่สร้างแยกไว้ใน directory ของตัวเอง
จะเห็นว่าถ้าเข้าไปใน project ก็จะเห็นว่า configuration เปลี่ยนไปตาม .gitconfig
ที่กำหนดแยกกันไว้แล้ว ไม่มีการ commit ผิด user แน่นอนตราบใดที่เราเอา project ไว้ตาม directory ที่ถูกต้อง
$ git config --list
...
user.name=Earth Raksit
user.email=raksit.m@ku.th
...
ลองนำไปปรับใช้กันดูครับ จะได้ไม่ต้องมา overwrite Git configuration กันทีละ project