มาลองเล่น Git กัน
สวัสดีชาวโลกฮะ
ครั้งที่แล้ว เล่าถึง Docker ที่คอยอำนวยความสะดวกเหล่าโปรแกรมเมอร์ด้าน environment คราวนี้เป็นอีกเครื่องมือที่อำนวยความสะดวกด้าน source code ที่เวลาเราเขียนที ก็เขียนไปเป็นสิบเป็นร้อยไฟล์ ปัญหาตามมาเยอะแยะ
- ถ้าเข้าใจ requirement ผิดไป แล้วเขียน code ไปเยอะแล้ว จะย้อนไปแก้ code จากตรงไหนดี
- ถ้าเขียน code หลายๆ คนใน project เดียวกัน จะจัดระเบียบยังไง ไม่ให้คนอื่นเขียน code ทับซ้อนกันจนเกิดปัญหา
- ถ้าจะ deploy บน production จะทำยังไงให้ง่ายที่สุด โดยไม่ต้อง copy ใส่ flashdrive หรือ zip ใส่ cloud ไป download ที่เครื่องปลายทาง
- ถ้าต้องการให้คนอื่นสามารถนำ source code เราไปใช้งานต่อได้ แบบ open-source อย่างนี้
- และอื่นๆ อีกมากมายพันประการ
อย่ากระนั้นเลย เรามาเริ่มใช้ Git กันเถอะ
Git คืออะไร
Git เป็นเครื่องมือตัวนึงที่ทำหน้าที่เป็น Repository หรือคลังสมบัติของเรานั่นเอง ใช้เก็บรักษา source code ต่างๆ และยังอำนวยความสะดวกในการปรับปรุง หรือแก้ไขอีกด้วย อย่างง่ายที่สุด คือ เก็บ source code ที่เป็น open-source ให้คนอื่นๆ หยิบไปใช้ หรือพัฒนาต่อได้
วิธีใช้งานของมัน คือ วาง source code ของเราไปไว้ใน git server ถ้าต้องการ update ก็วางทับ ถ้าต้องการย้อนกลับก็หยิบ version ก่อนหน้ามาได้ หรือถ้าต้องการใช้งานร่วมกับคนอื่นก็เปิดสิทธิให้เค้าสามารถดึงไปจาก git server หรือแม้กระทั่งให้สิทธิเค้าสามารถรวม source code กับเราได้เหมือนกันฮะ
Environment ที่เกี่ยวข้องมีตามรูปนี้เลยฮะ
- working directory
ก็คือ ที่อยู่ของไฟล์ source code ในเครื่องเราเองฮะ ที่ใช้ทำงานกันนั่นแหละ - staging
ไฟล์ไหนที่เราจะเอาไปวางไว้ใน repository (ต่อไปผมจะเรียกย่อๆ ว่า repo ฮะ) มันจะเข้าไปอยู่ใน staging ก่อน เป็นอีกหนึ่งระดับเพื่อเอาไว้ตรวจสอบก่อน - local repo
เมื่อเราตรวจสอบไฟล์ใน staging ว่าโอเคแล้ว ถูกต้องแล้ว การยืนยันจาก staging จะย้ายไฟล์ไปอยู่ที่ระดับ local repo ก่อนย้ายไปที่ cloud จริงๆ ของ Git server ฮะ - remote repo
อันนี้คือปลายทางล่ะ เมื่อเราตรวจสอบทุกอย่างเรียบร้อยแล้ว source code เราก็จะไปอยู่ที่ cloud พร้อมให้เราหรือคนอื่นมาหยิบไปใช้งานต่อได้ฮะ
เริ่มต้นใช้ Git ยังไงดี
1. หา Git Server
มีหลายเจ้าให้เลือกสรรเลยฮะ เช่น
Githubเป็น Git server ชื่อดังของโลกเลยแหละ คิดว่าคงรู้จักหมดแล้วเนอะ จุดเด่นคือความเป็น open-source community แหละฮะ โปรเจคท์หลายตัวที่น่าสนใจจะเจอได้ที่นี่เลย |
|
Gitlabเป็นเจ้าดังอีกเจ้าเช่นเดียวกันฮะ จุดเด่น คือ มี CI/CD มาตั้งแต่แรก ทำให้เราทำ automation ได้สะดวกมากๆ ฮะ (แต่ตัวนี้ผมยังไม่เคยเล่นนะ ฮา) |
|
BitBucketผมใช้ตัวนี้ที่ทำงานฮะ จุดเด่นคือ มัน Integrate กับระบบของ Atlassian เช่น Jira หรือ Confluence หมายความว่า ถ้าเราใช้ product ของ Atlassian อยู่แล้ว การใช้ BitBucket จะทำให้ชีวิตง่ายขึ้นเยอะเลยฮะ |
หรือเราจะใช้ server ของเราเองมาทำ Git ก็ได้ฮะ
2. มี Git account
ต่อจากข้างบนฮะ ถ้าเราเลือก server ได้แล้ว เราก็ต้องมี Git account สำหรับเข้า repo ของเราฮะ นั่นคือ เราสมัครสัก server นึงก่อนเลย พอมี account แล้วทำลำดับต่อไป
3. ติดตั้ง Git ลงในเครื่อง
- Windows
ถ้าเป็น Windows ก็ download จาก https://git-scm.com/download/win ได้เลยฮะ - Unix
สามารถใช้คำสั่งyum install git-core
หรือapt install git-core
ได้เลยฮะ (ขึ้นอยู่กับแต่ละ Distro) - OSX
จะติดตั้งมาตั้งแต่แรกแล้วฮะ ตั้งแต่ OSX Maverick ฮะ
หรือถ้าติดตั้งไม่ได้ยังไง ลองดูที่ลิงก์นี้ได้ฮะ https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
4. สร้าง Repo กันก่อน
Repo ก็เหมือนกับ folder ของ source code เรื่องนี้ฮะ เป็น folder ใหญ่เลย เราก็สร้างมันมาก่อน อย่างในรูปข้างล่าง คือผมสร้าง repo ชื่อ test_git
5. ผูก Public key ของเครื่องเรากับ Git server
ขั้นตอนต่อมาคือ ผูกให้เครื่องของเรากับ Git server สามารถแลกเปลี่ยนไฟล์กันได้ เพราะเราต้องการให้มัน sync กันฮะ จึงต้องใช้ Public key เพื่อผูกเครื่องของเราเข้ากับ Git server ทำแบบนี้ฮะ
สร้าง Public key ก่อน
ดูวิธีสร้างจากลิงก์นี้ฮะ https://confluence.atlassian.com/bitbucket/set-up-an-ssh-key-728138079.html ซึ่ง Windows กับ OSX ก็ทำต่างกันฮะ
เพิ่ม Public key
เปิดไฟล์ Public key ที่ว่า (เป็นไฟล์ .pub
) แล้ววางลงในหน้า Setting > SSH key ของ Git account เราฮะ
6. เริ่มต้น sync ระหว่าง Git กับเครื่องเรา
ใช้คำสั่ง git init
เพื่อเริ่มต้นสร้างไฟล์ .git
ซึ่งเจ้านี่จะเป็นตัวกลางระหว่าง Git server กับเครื่องเราเลยล่ะฮะ
git init
สำคัญตรงนี้ฮะ เราจะ sync ไฟล์ของเราเข้ากับที่ที่มีไฟล์ .git
อยู่นะฮะ
ผูก Git repo เข้ากับ .git
ด้วยคำสั่งนี้ฮะ
git remote add origin [git_url]
ซึ่ง git_url
หาได้จากตรงนี้ฮะ (ของ Github นะ) ให้อยู่ในรูปของ [email protected]:abc/repo.git
พอเรา git remote add origin
แล้วเครื่องเราก็พร้อมจะ sync Git แล้วฮะ
สามารถใช้ git remote show origin
เพื่อให้เราแน่ใจว่าทุกอย่างเรียบร้อยฮะ
7. ตั้งค่า กำหนดตัวตนของเรา
git config – global user.email "[email protected]"
git config – global user.name "my name"
มีผลตอนเรา upload Git มันจะแสดงในประวัติการเปลี่ยนแปลง source code หรือเรียกว่า commit
ฮะ
8. ปรับไฟล์ให้ตรงกัน
สมมติว่า ที่ repo มีไฟล์อยู่แล้ว เราต้องการ download มันลงมาที่เครื่อง ใช้คำสั่งนี้ฮะ
git clone [git_url] [local_path]
จะเห็นเลยว่า พอเรา clone มันจาก git_url
ลงมาที่ local_path
มันก็จะ copy มาทั้งหมดเลยฮะ และ local_path
นี่แหละจะเป็น working repo ของเรา
9. ปรับไฟล์ไปยัง staging
เมื่อไฟล์ตรงกันระหว่างเครื่องเรากับ Git แล้ว ก็ได้เวลาที่เราจะ copy จากเครื่องเราไปที่ปลายทางล่ะฮะ
เริ่มต้นเลย เราก็จะเข้าไปที่ working repository ก่อนฮะ
เช็คสถานะว่าไฟล์ที่จะ upload เป็นอย่างไร
git status
รูปนี้ คือ ยังไม่มีไฟล์อะไรเลย จึงไม่แสดงชื่อไฟล์ใดๆ ขึ้นมาฮะ
รูปข้างล่าง คือ ผมสร้างไฟล์เปล่าๆ มาตัวนึง ชื่อ test.txt
ต่อมา เราก็จะเพิ่มไฟล์ตัวนี้ไปยัง staging ด้วยคำสั่ง
git add [path_folders_or_files]
จะเห็นได้ว่า เรามี new file: test.txt
มาแล้วนะ
ถ้าไม่อยากให้ไฟล์ไหนอยู่ใน staging ก็ลบออก ด้วยคำสั่ง
git rm -- cached [path_folders_or_files]
จะเห็นว่าไฟล์ test.txt ไปอยู่ที่ untracked files แทนแล้วฮะ
ปล. ถ้าเราต้องการที่จะลบไฟล์ทิ้งไปเลยทั้งใน staging และใน working directory สามารถใช้คำสั่ง
git rm -f [path_folders_or_files]
10. ปรับไฟล์ไปที่ local repo
ขอ add test.txt
อีกรอบนะฮะ แล้วเมื่อ staging ไฟล์จนครบแล้ว เราก็ยืนยันอีกที ด้วยคำสั่ง
git commit -m "description"
มันจะให้เราใส่ข้อความประกอบไปด้วยว่าทำอะไรไป ตรง "description" นี้คือฟรีสไตล์เลยฮะ เขียนอธิบายคร่าวๆ ไปว่าเกิดอะไรบ้าง ดูย้อนหลังจะได้รู้ความเปลี่ยนแปลง
11. ปรับไฟล์ไปที่ remote repo
เมื่อยืนยันแล้ว มันจะยังไม่เปลี่ยน source code ที่ Remote repo ทันที มันจะอยู่ในรูปของกิ่ง (branch) เพื่อให้เราตัดสินใจว่าจะแก้ไขอะไรต่อไหม ถ้าเราต้องการรวมกิ่งนี้เข้ากับ Remote repo ก็ใช้คำสั่ง
git push origin master
มันคือกิ่งปัจจุบัน (origin ถ้าไม่มีการตั้งค่าอื่นๆ) ถูกรวมเข้ากับ folder หลัก (master) ที่ Repo ฮะ
12. ดูผลที่ Git server
ชัดเจนเลยฮะ ที่เรา push ไปตะกี้เป็น commit ของ test.txt
ด้วยข้อความที่เราใส่ไป เท่านี้ก็สำเร็จแล้วฮะ
ทิ้งท้าย
นี่เป็นแค่ตัวอย่างของการใช้ Git แบบง่ายๆ เราสามารถเล่นกับมันได้หลายวิธีมากฮะ ไม่ว่าจะเป็นการแตกกิ่ง การรวมกิ่ง การยกเลิกกิ่ง ซึ่งเข้าไปดู document เต็มๆ ได้ที่ https://git-scm.com/docs ฮะ
ถ้าเจออะไร จะมาแชร์ให้อ่านกันนะฮะ
บาย ~
References
https://dev.to/mollynem/git-github–workflow-fundamentals-5496
https://stackshare.io/stackups/bitbucket-vs-github-vs-gitlab