- คอร์สเรียนฟรี
- 3. Git - เครื่องมือควบคุมเวอร์ชั่นโปรแกรม และการทำงานร่วมกับผู้อื่น
- 2. การใช้งาน Git ผ่าน GUI อย่างง่าย เพื่อควบคุมเวอร์ชั่นของโปรแกรม
2. การใช้งาน Git ผ่าน GUI อย่างง่าย เพื่อควบคุมเวอร์ชั่นของโปรแกรม
- ความยาวของวิดีโอ: 32 นาที 50 วินาที
ในคอร์สเรียนนี้เราจะสอนการใช้งาน Git เหมาะกับผู้ที่ยังไม่เคยใช้งาน หรือต้องการเรียนรู้ระดับพื้นฐาน โดยใช้ Git GUI
สิ่งที่จะได้เรียนรู้ในบทนี้:
- สอนวิธีการใช้งาน Git โดยพื้นฐานผ่าน GUI
- การใช้ VSCode ร่วมกับ Git
- วิธีการใช้งาน VSCode Extensions ของ Git Graph
การติดตั้ง Git
สำหรับไฟล์การติดตั้งสามารถดาวน์โหลดได้ที่ https://git-scm.com/downloads ส่วนของขั้นตอนการติดตั้ง เราสามารถกด Next
จนติดตั้งเสร็จได้เลย เนื่องจากค่าเริ่มต้นก็สามารถใช้งานโดยพื้นฐานได้ หากมีความเข้าใจ Git ที่ดีขึ้นและต้องการปรับรูปแบบการติดตั้ง สามารถเริ่มการติดตั้งใหม่อีกครั้งในภายหลังได้
ความแตกต่างของ GUI และ CLI
ในโลกของคอมพิวเตอร์ เรามีรูปแบบหน้าจอโปรแกรมอยู่สองประเภท คือ
- Graphical User Interface (GUI) จะมีข้อดีคือแสดงตัวโปรแกรมเป็นกราฟฟิค สามารถใช้เมาส์และอุปกรณ์อื่นๆในการสั่งงานได้ แต่นักพัฒนาโปรแกรมจะต้องใช้เวลาสร้างโปรแกรมที่นานกว่า ถึงอย่างไรจะเป็นการแสดงผลของโปรแกรมที่เหมาะแก่ผู้ใช้งานทั่วไปมากที่สุด
- Command-line Interface (CLI) จะมีข้อดีคือตัวโปรแกรมถูกพัฒนาได้เร็วกว่า ใช้ทรัพยากรคอมพิวเตอร์น้อยกว่าจึงเหมาะกับงาน Web Server จึงมีข้อเสียสวนทางกัน คือโปรแกรมจะใช้งานยาก ไม่มีกราฟฟิค มีเพียงข้อความ และรับข้อมูลได้ผ่านทางคีย์บอร์ดเท่านั้น จะไม่สามารถใช้เมาส์หรืออุปกรณ์อื่นๆในการสั่งงานได้
ดังนั้นจึงทำให้มีอยู่หลายโปรแกรมสำหรับนักพัฒนาโปรแกรม ที่จะเป็นรูปแบบ CLI เท่านั้น เพราะโปรแกรมเมอร์ ที่จะสร้างโปรแกรมอำนวยความสะดวกแก่โปรแกรมเมอร์กันเอง ก็จะเลือกวิธีการให้พัฒนารวดเร็วที่สุด และไม่จำเป็นต้องออกแบบหน้าตาของโปรแกรมนั้นเอง
แต่อย่างไรก็ตามเนื่องจาก Git เป็นโปรแกรมที่มีมานาน จากสมัยก่อนที่จะมีเฉพาะ Git CLI จึงมีกลุ่มผู้พัฒนาช่วยสร้าง GUI ออกมาให้ใช้งานกันที่ดีกว่าเดิมนั้นเอง เราจึงสามารถใช้ได้ทั้งสองรูปแบบสำหรับการใช้งาน Git
และอาจจะมีบางเหตุการณ์ ที่ทำให้เราจำเป็นต้องใช้ Git CLI เช่น
- Server ที่ไม่มีการ์ดจอแสดงผล หรือเป็นระบบแบบเน้นใช้ทรัพยากรน้อย ทำมีโปรแกรมเกือบทุกตัวที่จำเป็นต้องใช้ CLI แทน แต่อย่างไรก็ตามอาจจะพอมีวิธี Remote Server มายังเครื่องของเราที่เปิดใช้ด้วย GUI อยู่บ้าง
- งาน DevOps ที่จำเป็นต้องสั่งงานอัตโนมัติ จะต้องใช้ CLI ในการสั่งงานเท่านั้น
- แก้ปัญหาบางอย่างที่ GUI ไม่รองรับ จึงต้องแก้ไขด้วย CLI ที่มีคุณสมบัติครบถ้วนมากกว่า
จากความเห็นส่วนตัวที่ได้สอนมา จะมีหลายคอร์สเรียนสอนใช้ Git CLI ก่อนเพื่อทำความเข้าใจสิ่งที่ยากที่สุดและเป็นจุดเริ่มต้น ก่อนที่จะเรียนเรื่องง่ายอย่าง Git GUI แต่สำหรับผมแล้วงานส่วนตัวเองก็ไม่ได้ใช้ Git CLI บ่อยมากนัก ส่วนมากจะพยายามเลือกใช้งาน GUI เนื่องจากความสะดวก และอาจจะเร็วกว่าการพิมพ์คำสั่ง จึงคิดว่า การสอนเริ่มจาก Git GUI เป็นเรื่องที่ดีกว่า เพราะเข้าใจง่ายกว่าด้วย จากนั้นจึงค่อยเริ่มใช้ Git CLI ในภายหลังเพื่องานต่างๆตามที่ได้กล่าวไว้ข้างต้น
การใช้งาน Git GUI
สำหรับรายการทั้งหมดสามารถตรวจสอบได้จาก https://git-scm.com/downloads/guis โดยทางผมจะเลือกใช้ Git Graph ในการสอนแบบวิดีโอ ซึ่งจะเป็น Extensions ที่มีบน Visual Studio Code
โดยเมื่อเราเข้าใจคุณสมบัติจากคำศัพท์ต่างๆของ Git ที่มี ก็จะสามารถใช้งานได้ทั้ง Git GUI อื่นๆ และการเลือกใช้คำสั่งของ Git CLI ง่ายขึ้น จึงทำให้เราจะสามารถเลือกเรียนด้วย Git GUI ตัวใดๆก็ได้เช่นกัน
คำศัพท์เฉพาะทางจาก Git ที่ควรรู้จัก
อ้างอิงเฉพาะคำที่ใช้บ่อยจาก https://en.wikipedia.org/wiki/Version_control#Common_terminology และอื่นๆ
- Initialize (Init) การเริ่มต้น Repository จาก Directory (Folder) ที่ยังไม่เคยเป็น Repository มาก่อน
- Repository (Repo) ที่เก็บข้อมูลโปรเจกต์เพื่อการใช้งาน Git ใน Directory (Folder)
- Local Repository Repository ที่อยู่บนเครื่องคอมพิวเตอร์ของเราหรือผู้ใช้อื่นๆ
- Remote Repository Repository ที่อยู่บนเครื่องเซิร์ฟเวอร์ เช่น บน GitHub
- Working Directory อีกคำเรียกสำหรับ Local Repository ที่หมายถึงตัวโฟลเดอร์ที่เรากำลังใช้งาน Git
- Change การเปลี่ยนแปลงไฟล์ที่เกิดขึ้นบน Repository
- Stage Change เลือกไฟล์ที่มีการเปลี่ยนแปลง เตรียมเข้าสู่กระบวนการ Commit
- Unstage Change ยกเลิกไฟล์ที่เลือก Stage Change
- Discard Change ยกเลิกและลบการเปลี่ยนแปลงของไฟล์ที่เกิดขึ้น
- Commit บันทึกการเปลี่ยนแปลงที่เกิดขึ้นบน Repository โดยบันทึกไฟล์ที่ถูกเลือกไปยัง Stage เท่านั้น
- Commit Message ข้อความสำหรับอธิบายการบันทึกการเปลี่ยนแปลงแต่ละครั้ง โดยอาจจะมี Conventional Commits เป็นแนวทางปฏิบัติสำหรับวิธีเขียน Message
- Commit Amend คำสั่งแก้ไข Commit Message ล่าสุดที่อาจจะเขียนข้อความผิดพลาด
- Head อ้างอิงถึงตำแหน่ง Commit ล่าสุดของ Branch นั้นๆ
- Blame การตรวจสอบว่าใครเป็นผู้แก้ไขแต่ละบรรทัดของไฟล์
- Branch สาขาการพัฒนาโปรแกรม โดยจะมีแบ่งเป็น Commit แยกเส้นทางกัน เพื่อไม่ให้กระทบกับงานหลัก หรือแยกการทำงานในแต่ละรูปแบบ
- Checkout การสลับไปยังกลุ่มโค้ดในจุดต่างๆ เช่น จุดที่ Commit ล่าสุดของ Branch
- Tag การทำเครื่องหมายใน Commit เพื่ออ้างอิงหมายเลขเวอร์ชั่นของโปรแกรม หรืออื่นๆ
- Stash ที่เก็บโค้ดชั่วคราว คล้ายกับการ Commit แต่จุดประสงค์คืออาจจะนำไปใช้ และลบออกในภายหลัง
- Merge การรวมโค้ดที่เปลี่ยนแปลงระหว่างสอง Branch เข้ารวมเป็นหนึ่งเดียวกัน โดยสร้าง Commit ใหม่
- Conflict เกิดขึ้นเมื่อมีการ Merge แล้วแหล่งที่มาแต่ละ Branch อาจจะมีโค้ดที่แก้ไขซ้ำบรรทัดกัน จน Git ไม่สามารถตัดสินใจเองได้ว่าจะนำบรรทัดเหล่านั้นมาใช้งานอย่างไรต่อ เราจึงต้องเป็นคนแก้ไขเอง
- Resolve กระบวนการแก้ไข Conflict ที่เกิดขึ้นจากการ Merge Branch แล้วไม่สามารถตัดสินใจเองได้ว่าจะเลือกใช้บรรทัดจากแหล่งที่มาใด
- Clone การคัดลอก Remote Repository ไปยัง Local Repository
- Fork การทำสำเนา Remote Repository ลงบน Remote Repository จากแหล่งอื่น คล้ายกับการ Clone
- Fetch การดึงข้อมูลจาก Remote Repository โดยเรียกดูข้อมูลล่าสุด แต่จะไม่มีการนำการเปลี่ยนแปลงไปใช้งาน
- Pull การดึงข้อมูลจาก Remote Repository โดยนำการเปลี่ยนแปลงล่าสุดไปใช้งานต่อ หรือก็คือการดาวน์โหลดเปลี่ยนแปลงล่าสุดจากเซิร์ฟเวอร์
- Push การส่ง Commit จาก Local Repository ไปยัง Remote Repository หรือก็คือการอัปโหลดเปลี่ยนแปลงล่าสุดจากเครื่องเรา
- Push (Force) คำสั่ง Push ที่ปฏิเสธคำเตือนต่างๆ เช่น การ Push เพื่อลบ Commit ที่มีความผิดพลาดแต่อยู่บน Remote Repository แล้ว
- Pull Request หรือ Merge Request คำร้องจากนักพัฒนาโปรแกรมผู้อื่น ที่อาจจะไม่มีสิทธิแก้ไขโค้ดเราบน Remote Repository ทำการรวม (Merge) ไปยัง Local Repository ของเขาเหล่านั้น ไปยังของเรา โดยเราหรือผู้มีสิทธิจะต้องเป็นผู้อนุมัติการ Merge ได้
- Publish Branch คำสั่งการ Push Branch จาก Local Repository ไปยัง Remote Repository
- Origin ชื่อที่มักใช้ตั้งขึ้น สำหรับ Remote Repository ที่สำคัญ เนื่องจากเราสามารถตั้งให้โปรเจกต์เรามี Remote Repository หลายที่มาได้
- Rebase คำสั่งการปรับฐานจาก Branch แหล่งที่มาอื่นๆ คล้ายกับการ Merge แต่จะไม่ให้เกิด Commit ใหม่ มักจะนำไปใช้เพื่อให้ง่ายต่อการอ่านในกรณีต้องการนำโค้ดแหล่งที่มาอื่นๆมาใช้พัฒนาต่อ
- Revert คำสั่งยกเลิก Commit ที่เลือก เช่น หาก Commit นี้มีการเพิ่มไฟล์ทั้งหมด 2 ไฟล์ เมื่อมีการ Revert จะกลายเป็นว่าทั้ง 2 ไฟล์นี้ถูกลบไป
- Cherry Pick คำสั่งดึงการเปลี่ยนแปลงจาก Commit หนึ่งมาใช้งานกับ Branch ปัจจุบัน โดยไม่ต้อง Merge หรือ Rebase อาจจะใช้เพื่อเลือกการเปลี่ยนเฉพาะจุดเดียวเท่านั้น แต่ไม่ได้ต้องการใน Branch ทั้งหมด
- Submodule คือ Repository ที่ประกอบไปด้วย Repository ปลึกย่อยต่างๆ
- Git Ignore (.gitignore) ไฟล์พิเศษสำหรับระบุชื่อไฟล์และโฟลเดอร์ เพื่อให้ Git ละเว้นติดตามการเปลี่ยนแปลงและไม่จำเป็นต้อง Commit มาใช้งาน
สำหรับขั้นตอนการปฏิบัติ แนะนำให้ดูจากวิดีโอบน YouTube ในบทนี้
- Tags:
- Git
- Git-GUI
- การใช้งาน-Git
- version-control
- เครื่องมือควบคุมเวอร์ชั่น
- Git-through-GUI
- การควบคุมเวอร์ชั่น
- Git-เบื้องต้น
- โปรแกรมเมอร์
- การพัฒนาโปรแกรม
- Git-สำหรับมือใหม่
- การใช้งาน-Git-GUI
- การจัดการโค้ด
- Git-กราฟิก
- Git-interface
- ง่ายต่อการใช้งาน
- Git-tools
- การจัดการเวอร์ชั่น
- Git-visual-tools
- GUI-tools-for-Git
- version-control-with-GUI
- software-development
- Git-visualization
- Git-ease-of-use