กลับสู่คอร์สเรียน
AI016 Professional

บทเรียน Git ของ Ry

คู่มือที่ครอบคลุมเกี่ยวกับระบบควบคุมเวอร์ชัน Git ตั้งแต่การใช้งานพื้นฐาน เช่น การเตรียมงานและการบันทึกการเปลี่ยนแปลง ไปจนถึงหัวข้อขั้นสูง เช่น การรีเบสแบบโต้ตอบ การทำงานร่วมกันผ่านระยะไกล และการทำงานภายในของฐานข้อมูลวัตถุใน Git

4.9
39.0h
983 ผู้เรียน
0 การถูกใจ
ปัญญาประดิษฐ์
เริ่มเรียน

ภาพรวมคอร์สเรียน

📚 สรุปเนื้อหา

คู่มือที่ครอบคลุมเกี่ยวกับระบบควบคุมเวอร์ชัน Git ตั้งแต่การใช้งานพื้นฐาน เช่น การจัดเตรียมไฟล์และการบันทึกเปลี่ยนแปลง ไปจนถึงหัวข้อขั้นสูง เช่น การรวมงานแบบโต้ตอบ (interactive rebasing) การทำงานร่วมกันผ่านเครือข่าย และโครงสร้างพื้นฐานภายในของฐานข้อมูลวัตถุใน Git

เชี่ยวชาญระบบควบคุมเวอร์ชันที่ได้รับความนิยมที่สุดในโลก ตั้งแต่คำสั่งพื้นฐานไปจนถึงแก่นแท้ของระบบ

ผู้เขียน: ไรอัน ฮอดสัน

ขอบคุณ: ไม่มีการกล่าวถึงอย่างเป็นทางการในส่วนนำ

🎯 เป้าหมายการเรียนรู้

  1. เปรียบเทียบและแยกแยะระบบควบคุมเวอร์ชันแบบท้องถิ่น (Local) แบบศูนย์กลาง (Centralized) และแบบกระจาย (Distributed)
  2. ระบุแรงจูงใจทางประวัติศาสตร์ที่นำไปสู่การสร้าง Git สำหรับโปรเจกต์เคอร์เนลลินุกซ์
  3. ดำเนินการตั้งค่าเบื้องต้นของ Git รวมถึงการตรวจสอบการติดตั้ง สร้างโครงการเริ่มต้น และติดตามไฟล์
  4. สร้างเรพโอซิทอรี Git และระบุบทบาทของไดเรกทอรี .git
  5. กำหนดค่าการตั้งค่าผู้ใช้ทั่วไป และติดตามไฟล์โปรเจกต์โดยใช้พื้นที่เตรียม (staging area)
  6. ดำเนินการบันทึก (commit) เพื่อสร้างภาพรวมสถานะโปรเจกต์ และตรวจสอบประวัติการเปลี่ยนแปลงในเรพโอซิทอรี
  7. ย้ายไปยังการเปลี่ยนแปลงในอดีตเฉพาะเจาะจงโดยใช้รหัส (ID) และกลับมาสู่สถานะปัจจุบันของโปรเจกต์
  8. สร้างและจัดการแท็กที่มีคำอธิบายเพื่อระบุเวอร์ชันที่เสถียร
  9. ใช้ git revert เพื่อย้อนการเปลี่ยนแปลงที่บันทึกแล้ว โดยคงประวัติให้โปร่งใส
  10. ระบุ สร้าง และสลับระหว่างสาขา (branch) โดยใช้ไลน์อินเตอร์เฟซของ Git

🔹 บทเรียนที่ 1: ประวัติและหลักการพื้นฐานของการควบคุมเวอร์ชัน

ภาพรวม: บทเรียนนี้ติดตามการพัฒนาของระบบควบคุมเวอร์ชันตั้งแต่การจัดการไฟล์ด้วยมือ ไปจนถึงระบบที่ซับซ้อนแบบกระจายศูนย์กลาง รายละเอียดความแตกต่างทางสถาปัตยกรรมระหว่างระบบควบคุมเวอร์ชันแบบท้องถิ่น แบบศูนย์กลาง และแบบกระจาย (VCS) และอธิบายบริบททางประวัติศาสตร์ที่นำไปสู่การสร้าง Git โดยเฉพาะสำหรับเคอร์เนลลินุกซ์ นักเรียนจะได้เรียนรู้ขั้นตอนพื้นฐานในการติดตั้ง Git และเริ่มต้นสร้างเรพโอซิทอรีครั้งแรก

ผลลัพธ์การเรียนรู้:

  • เปรียบเทียบและแยกแยะระบบควบคุมเวอร์ชันแบบท้องถิ่น แบบศูนย์กลาง และแบบกระจาย
  • ระบุแรงจูงใจทางประวัติศาสตร์ที่นำไปสู่การสร้าง Git สำหรับเคอร์เนลลินุกซ์
  • ดำเนินการตั้งค่าเบื้องต้นของ Git รวมถึงการตรวจสอบการติดตั้ง สร้างเรพโอซิทอรี และติดตามไฟล์

🔹 บทเรียนที่ 2: ทักษะพื้นฐาน: การจัดเตรียมและบันทึก

ภาพรวม: บทเรียนนี้ครอบคลุมวงจรการทำงานพื้นฐานของเรพโอซิทอรี Git ตั้งแต่โฟลเดอร์โปรเจกต์ปกติ ไปจนถึงสภาพแวดล้อมที่มีการควบคุมเวอร์ชัน นักเรียนจะได้เรียนรู้การเริ่มต้นเรพโอซิทอรี การตั้งค่าตัวตนผู้ใช้ การติดตามไฟล์ใหม่ และการจัดการกระบวนการเปลี่ยนแปลงจากพื้นที่เตรียม (staging area) ไปสู่ประวัติการบันทึกที่คงที่

ผลลัพธ์การเรียนรู้:

  • สร้างเรพโอซิทอรี Git และระบุบทบาทของไดเรกทอรี .git
  • ตั้งค่าผู้ใช้ทั่วไป และติดตามไฟล์โปรเจกต์โดยใช้พื้นที่เตรียม (staging area)
  • ดำเนินการบันทึกเพื่อสร้างภาพรวมสถานะโปรเจกต์ และตรวจสอบประวัติการเปลี่ยนแปลงในเรพโอซิทอรี

🔹 บทเรียนที่ 3: การยกเลิกการเปลี่ยนแปลงและการสำรวจประวัติ

ภาพรวม: บทเรียนนี้ครอบคลุมเทคนิคพื้นฐานของ Git สำหรับการเดินทางย้อนเวลาภายในเรพโอซิทอรี ซึ่งช่วยให้นักพัฒนาสามารถตรวจสอบสถานะในอดีต ตั้งจุดสำคัญ และย้อนกลับข้อผิดพลาดอย่างปลอดภัย ผู้เรียนจะได้เชี่ยวชาญความสามารถในการดูรุ่นเก่าโดยไม่ทำให้เกิดการเปลี่ยนแปลงถาวร ใช้แท็กที่มีคำอธิบายเพื่อติดป้ายเวอร์ชันที่ออกใหม่ และแยกแยะระหว่างการย้อนการเปลี่ยนแปลงที่บันทึกไว้ กับการล้างงานทดลองที่ยังไม่บันทึก

ผลลัพธ์การเรียนรู้:

  • ย้ายไปยังการเปลี่ยนแปลงเฉพาะในอดีตโดยใช้รหัส (ID) และกลับมาสู่สถานะปัจจุบันของโปรเจกต์
  • สร้างและจัดการแท็กที่มีคำอธิบายเพื่อระบุเวอร์ชันที่เสถียร
  • ใช้ git revert เพื่อย้อนการเปลี่ยนแปลงที่บันทึกแล้ว โดยคงประวัติให้โปร่งใส

🔹 บทเรียนที่ 4: การสร้างสาขาและรวมงานพื้นฐาน

ภาพรวม: บทเรียนนี้ครอบคลุมวงจรการทำงานพื้นฐานของสาขาใน Git ตั้งแต่แนวคิดว่าสาขาเป็นเส้นทางพัฒนาที่แยกจากกัน ไปจนถึงการปฏิบัติจริง นักเรียนจะได้เรียนรู้การสร้าง นำทาง และแสดงภาพรวมของประวัติที่แยกออก (forked history) พร้อมการรวมงานผ่านการรวมแบบ "Fast-forward" และ "3-way merge" และการลบสาขาชั่วคราวหลังเสร็จสิ้น

ผลลัพธ์การเรียนรู้:

  • ระบุ สร้าง และสลับระหว่างสาขาโดยใช้ไลน์อินเตอร์เฟซของ Git
  • อ่านแผนภาพประวัติการเปลี่ยนแปลงที่แยกออก เพื่อเข้าใจความสัมพันธ์ระหว่าง master กับสาขาฟีเจอร์
  • ดำเนินการและแยกแยะระหว่าง "การรวมแบบ Fast-forward" และ "การรวมแบบ 3 ทาง"

🔹 บทเรียนที่ 5: การสร้างสาขาขั้นสูงและการแก้ไขข้อขัดแย้ง

ภาพรวม: บทเรียนนี้สำรวจการดำเนินการขั้นสูงใน Git ที่จำเป็นเมื่อประวัติโปรเจกต์แยกทางกัน ครอบคลุมกลไกทางทฤษฎีของการรวมแบบ 3 ทาง ใช้แฟลก -a เพื่อทำให้การบันทึกมีประสิทธิภาพมากขึ้น และจัดการสาขาฟีเจอร์ที่ใช้งานนาน นักเรียนจะได้เรียนรู้การจัดการปฏิสัมพันธ์ระหว่างสาขาที่ซับซ้อน การแก้ไขข้อขัดแย้งการรวมงานด้วยตนเอง และรักษาความสะอาดของเรพโอซิทอรีผ่านการลบสาขาที่ไม่จำเป็น

ผลลัพธ์การเรียนรู้:

  • อธิบายความแตกต่างทางโครงสร้างระหว่างการรวมแบบ Fast-forward และการรวมแบบ 3 ทาง
  • ใช้แฟลก -a เพื่อรวมการจัดเตรียมและบันทึกไฟล์ที่ติดตามไว้ในครั้งเดียว
  • ระบุและแก้ไขข้อขัดแย้งการรวมโดยตีความเครื่องหมายข้อขัดแย้งของ Git

🔹 บทเรียนที่ 6: การรวมงานเพื่อประวัติโปรเจกต์ที่เรียบง่าย

ภาพรวม: บทเรียนนี้ครอบคลุมเทคนิคการคงประวัติโปรเจกต์ให้เรียบง่ายและเป็นลำดับตรง โดยย้ายและรวมงานบันทึกเข้าด้วยกัน ผู้เรียนจะได้เชี่ยวชาญการเปลี่ยนจากสาขาที่แยกกันไปสู่ลำดับเวลาเดียวกัน โดยใช้การรวมแบบมาตรฐาน การรวมแบบโต้ตอบ (squashing) และความสามารถในการแก้ไขงานบันทึกเฉพาะจุดในกระบวนการนี้ สิ้นสุดบทเรียนนี้ นักเรียนจะเข้าใจวิธีกำจัดงานรวมที่ไม่จำเป็น และนำเสนอรายการบันทึกที่เป็นมืออาชีพและกระชับ

ผลลัพธ์การเรียนรู้:

  • เปลี่ยนจุดเริ่มต้นของสาขาฟีเจอร์ไปยังปลายของสาขาอื่น เพื่อเปิดโอกาสให้รวมแบบ Fast-forward
  • ใช้การรวมแบบโต้ตอบเพื่อรวมงานบันทึกจำนวนน้อยหลายครั้งให้กลายเป็นแค่หนึ่งภาพรวมที่มีความหมาย
  • แก้ไขงานบันทึกเดิมในระหว่างการรวมโดยใช้ฟังก์ชัน edit และ --amend

🔹 บทเรียนที่ 7: การแก้ไขประวัติและความปลอดภัยจาก Reflog

ภาพรวม: บทเรียนนี้สำรวจเทคนิคขั้นสูงของ Git สำหรับการคงประวัติโปรเจกต์ให้สะอาดและมืออาชีพ ผู้เรียนจะได้เชี่ยวชาญการใช้ "Interactive Rebase" เพื่อแก้ไขงานบันทึกในอดีต เรียนรู้กระบวนการทำงานที่แม่นยำในการแยกงานบันทึกทั่วไปออกเป็นงานเล็กๆ ที่มีความหมาย และใช้ "Reflog" เป็นเครื่องมือป้องกันที่ทรงพลังเพื่อฟื้นฟูข้อมูลที่ดูเหมือนหายไป

ผลลัพธ์การเรียนรู้:

  • ดำเนินการรวมแบบโต้ตอบเพื่อแก้ไข ปรับเปลี่ยน หรือแยกงานบันทึกในอดีต
  • แยกงานบันทึกทั่วไปหนึ่งงานออกเป็นงานที่เป็นอิสระและมีความหมายหลายงาน โดยใช้ git reset --mixed
  • ใช้ Reflog ของ Git เพื่อค้นหาและฟื้นฟูงานบันทึกที่ "ลอยตัว" (dangling commits) ที่ไม่ได้เชื่อมโยงกับสาขาใดๆ อีกต่อไป

🔹 บทเรียนที่ 8: การทำงานร่วมกันผ่านการส่งและดึงข้อมูล

ภาพรวม: บทเรียนนี้สำรวจแนวทางพื้นฐานสำหรับการทำงานร่วมกันหลายผู้ใช้ใน Git คุณจะได้เรียนรู้วิธีสร้างสำเนาเรพโอซิทอรีที่เป็นอิสระ ตั้งค่าตัวตนท้องถิ่นเพื่อจำลองผู้ใช้คนละคน และตั้งค่าการเชื่อมต่อ "ระยะไกล" เพื่อแลกเปลี่ยนโค้ด บทเรียนนี้เน้นกลไกการดึงข้อมูล (fetch) และการส่งข้อมูล (push) ระหว่างเรพโอซิทอรีเพื่อประสานงานการพัฒนา

ผลลัพธ์การเรียนรู้:

  • สำเนาและตั้งค่า: สำเนาเรพโอซิทอรีได้สำเร็จ และตั้งค่าการตั้งค่าระดับท้องถิ่น
  • ประสานงานระยะไกล: เพิ่มชื่อตำแหน่งระยะไกล และใช้ fetch และ merge เพื่อนำข้อมูลจากนักพัฒนาคนอื่นมาใช้
  • จัดการสถานะระยะไกล: นำทางสาขาที่อยู่ไกล และเข้าใจสถานะ "HEAD แยกตัว" เมื่อตรวจสอบโค้ดที่ไม่ใช่ท้องถิ่น

🔹 บทเรียนที่ 9: โมเดลเรพโอซิทอรีศูนย์กลางที่แบ่งปันกันได้

ภาพรวม: บทเรียนนี้ครอบคลุมการเปลี่ยนจากแนวทางการแชร์เรพโอซิทอรีแบบเพียร-ทู-เพียร ไปสู่แนวทางแบบศูนย์กลาง นักเรียนจะได้เรียนรู้วิธีสร้างเรพโอซิทอรี "เปล่า" (bare repository) เพื่อใช้เป็นศูนย์กลางสื่อสาร ปรับเปลี่ยนการเชื่อมต่อระยะไกลเพื่อใช้ในสภาพแวดล้อมทีม และจัดการการประสานงานการเปลี่ยนแปลง (การส่งและดึง) ระหว่างนักพัฒนาหลายคนเพื่อรักษาประวัติโปรเจกต์ให้สม่ำเสมอ

ผลลัพธ์การเรียนรู้:

  • สร้างและตั้งค่าเรพโอซิทอรีเปล่าเพื่อใช้เป็นเซิร์ฟเวอร์ศูนย์กลาง
  • จัดการการเชื่อมต่อระยะไกลเพื่อเปลี่ยนแนวทางการใช้งานท้องถิ่นไปยังศูนย์กลาง
  • ดำเนินการแนวทางมาตรฐานในการอัปเดตเนื้อหาที่แบ่งปัน และแก้ไขประวัติที่แยกกันโดยใช้ fetch, rebase, และ merge

🔹 บทเรียนที่ 10: โมเดลผู้รวมงานแบบกระจาย

ภาพรวม: บทเรียนนี้สำรวจการเปลี่ยนจากระบบควบคุมเวอร์ชันแบบศูนย์กลาง ไปสู่โมเดลผู้รวมงานแบบกระจาย โดยใช้ Bitbucket เป็นผู้ให้บริการโฮสต์ ผู้เรียนจะเริ่มจากการตั้งค่าเรพโอซิทอรีสาธารณะ ไปจนถึงการจัดการแนวทางที่ซับซ้อน ซึ่งผู้ "ผู้รวมงาน" (Integrator) จะตรวจสอบและรวมการเปลี่ยนแปลงจากเรพโอซิทอรีสาธารณะของนักพัฒนาคนอื่นๆ เข้าสู่เวอร์ชัน официัลของโปรเจกต์

ผลลัพธ์การเรียนรู้:

  • ตั้งค่าบัญชี Bitbucket และสร้างเรพโอซิทอรีสาธารณะเพื่อการทำงานร่วมกันแบบกระจาย
  • ดำเนินการ "กระบวนการทำงานของผู้รวมงาน" โดยจัดการเรพโอซิทอรีหลายแห่งเพื่อดึง ตรวจสอบ และรวมการเปลี่ยนแปลงจากภายนอก
  • รักษาความสอดคล้องระหว่างสภาพแวดล้อมส่วนตัวกับเรพโอซิทอรีที่เปิดเผยต่อสาธารณะในทีมพัฒนา

🔹 บทเรียนที่ 11: การสื่อสารและแนวทางแบบพัช (Patch)

ภาพรวม: บทเรียนนี้ครอบคลุมวงจรการทำงานของพัช (patch) ใน Git ซึ่งเป็นวิธีการแบ่งปันงานบันทึกเฉพาะเจาะจงระหว่างนักพัฒนา โดยไม่จำเป็นต้องมีสิทธิ์เข้าถึงเรพโอซิทอรีศูนย์กลาง นักเรียนจะได้เรียนรู้วิธีสร้างไฟล์พัชจากงานบันทึกในท้องถิ่น แจกจ่ายผ่านอีเมล และรวมพัชที่ได้รับเข้าสู่สาขาหลักของโปรเจกต์

ผลลัพธ์การเรียนรู้:

  • สร้างไฟล์พัชเฉพาะเจาะจงจากงานบันทึกหรือสาขาโดยใช้ git format-patch
  • นำไฟล์พัชภายนอกมาใช้ในเรพโอซิทอรีท้องถิ่นโดยใช้คำสั่ง git am และการรีไดเรกต์อินพุต
  • ดำเนินการกระบวนการรวมงานทั้งหมด รวมถึงการทดสอบพัชบนสาขาชั่วคราว และรวมเข้าสู่สาขาหลัก (master)

🔹 บทเรียนที่ 12: เครื่องมือเสริมของ Git, ฮุก และการเปรียบเทียบขั้นสูง

ภาพรวม: บทเรียนนี้ครอบคลุมคำสั่งเครื่องมือสำคัญของ Git และเทคนิคการปรับแต่งสำหรับการจัดการเรพโอซิทอรีขั้นสูง นักเรียนจะได้เรียนรู้วิธีส่งออกและแบ่งปันเรพโอซิทอรีผ่านการจัดเก็บ (archiving) และการบรรจุ (bundling) รักษาสภาพแวดล้อมที่สะอาดโดยใช้ .gitignore และ stash สร้างสคริปต์อัตโนมัติผ่านระบบฮุกของ Git และปรับปรุงประสบการณ์การใช้ไลน์อินเตอร์เฟซด้วยการเปรียบเทียบขั้นสูงและการตั้งชื่อสั้น (aliases) ที่กำหนดเอง

ผลลัพธ์การเรียนรู้:

  • แยกแยะและดำเนินการส่งออกเรพโอซิทอรีโดยใช้การจัดเก็บ (ไม่มีประวัติ) และการบรรจุ (มีประวัติครบ)
  • ตั้งค่ารูปแบบการยกเว้นไฟล์ และจัดการงานที่ยังไม่เสร็จ
  • ใช้สคริปต์อัตโนมัติในระบบฮุกภายในของ Git และทำให้กระบวนการทำงานราบรื่นด้วยชื่อสั้น (alias) ที่กำหนดเอง

🔹 บทเรียนที่ 13: โครงสร้างพื้นฐานของ Git: ฐานข้อมูลวัตถุภายใน

ภาพรวม: บทเรียนนี้ล้ำลึกไปใต้คำสั่งที่ใช้งานง่ายของ Git ("porcelain") เพื่อสำรวจ "plumbing" หรือฐานข้อมูลวัตถุระดับล่าง คุณจะได้เรียนรู้ว่า Git ใช้วัตถุประเภท 4 ชนิด (Blobs, Trees, Commits, Tags) และรหัสตรวจสอบ SHA-1 เพื่อบันทึกประวัติโปรเจกต์ หลังจบบทเรียนนี้ คุณจะเข้าใจวิธีการจัดการดัชนีและฐานข้อมูลวัตถุอย่างมืออาชีพ เพื่อสร้างงานบันทึกโดยไม่ต้องใช้ส่วนติดต่อระดับสูง

ผลลัพธ์การเรียนรู้:

  • นิยามและแยกแยะวัตถุประเภท 4 ชนิดของ Git: Blobs, Trees, Commits, และ Tags
  • อธิบายบทบาทของ HEAD และการอ้างอิงสาขาในการชี้ไปยังวัตถุงานบันทึกเฉพาะ
  • สาธิตกระบวนการ "plumbing": จัดเตรียมไฟล์ด้วยตนเอง เขียนโครงสร้างต้นไม้ (tree) และสร้างวัตถุงานบันทึก