กรุณาเลือก อุปกรณ์เคลื่อนที่ | แสดงผลรูแบบคอมพิวเตอร์
ดู: 202|ตอบ: 1

[Other] บทนำ มารู้จัก Git เบื้องต้นกันเถอะ

[คัดลอกลิงก์]
 
 มีนามว่าjojo741963 
 สมาชิกคนที่
 เพศ 
 ระดับการอ่าน200 
กระทู้ 
 ค่าประสบการณ์ 
 ทอง 
 ชื่อเสียง 
 ออนไลน์ 

คุณยังไม่ได้ใช้เหรียญ
กรุณาคลิกที่นี่เพื่อใช้เหรียญ

Flybee (C)
เจลลี่ บี
     
โพสต์เมื่อ 2022-6-19 16:07:13 | แสดงโพสต์ทั้งหมด |โหมดอ่าน
ดีจ้า~
บทความในกระทู้นี้ สรุปมาเองจากความรู้จากข้าพเจ้า อาจมีเนื้อหาที่ผิดพลาดไปบ้าง
และเขียนเพื่อแนะนำให้เพื่อน ๆ ในเว็บมาใช้ Git สำหรับการทำโปรเจ็คร่วมกันในอนาคตเท่านั้น
ท่านที่มีความรู้เพิ่มเติม สามารถลงคำแนะนำในคอมเม้นข้างล่างได้เล้ย~!



Git คืออะไร
อธิบายคุณสมบัติหลัก ๆ ของ Git 3 อย่าง ดังนี้
  • เก็บพื้นที่ต่าง ๆ ของโปรเจ็คได้ ตั้งแต่ Code เอกสาร คู่มือวิธีใช้ ตลอดจนไฟล์ภาพและเสียง
  • ตัวช่วยติดตามและควบคุมเวอร์ชั่นของตัวโปรเจ็ค
  • ทำให้โปรเจ็คทำงานร่วมกับนักพัฒนาหลายคนได้ง่าย

เก็บพื้นที่
การเราจะทำโปรเจ็คต่าง ๆ ก็ต้องมีพื้นที่สำหรับตัวโปรเจ็คนั้น บางคนอาจจะเก็บไว้ในคอมพิวเตอร์ตัวเอง เก็บในไดรฟ์พกพา หรืออาจจะเก็บไว้บนคลาวด์ต่าง ๆ
Git ก็เป็นอีกตัวเลือกนึง ที่เราสามารถใช้เก็บพื้นที่ต่าง ๆ ได้เหมือนกัน! (คุณสมบัตินี้อาจจะดูธรรมดาสักหน่อย)

ติดตามและควบคุมเวอร์ชั่น

ตัวอย่างการติดตามและควบคุมเวอร์ชั่นต่าง ๆ
ที่มารูป https://medium.com/devsondevs/gitflow-workflow-continuous-integration-continuous-delivery-7f4643abb64f

ไม่แปลกที่โปรเจ็คของเราเมื่อทำไปเรื่อย ๆ งานก็จะคืบหน้าไปเรื่อย ๆ Git จะคอยเช็คความเปลี่ยนแปลงตรงนี้ และบันทึกความคืบหน้าไว้ให้เราได้ เกิดเป็นโปรเจ็คเวอร์ชั่นต่าง ๆ (จะบันทึกถี่แค่ไหน ขึ่นอยู่กับความขยันของผู้ใช้)

การพัฒนาเกมแบบธรรมดา บางท่านอาจจะทำแล้วเซฟทับลงไปในตัวเกมเดิมเรื่อย ๆ
ถ้าหากพอถึงจุดนึงที่ต้องการย้อนกลับไปเวอร์ชั่นก่อนหน้า ก็เป็นเรื่องยากที่จะแก้ไขแล้ว เพราะระบบต่าง ๆ ถูกเขียนทับลงไปหมด

บางท่านอาจจะแก้ไขได้ โดยการ Backup File โปรเจ็คตัวเองหลาย ๆ เวอร์ชั่นเอาไว้ นั่นก็สามารถทำได้เช่นกัน
แต่ Git เกิดมาเพื่อทำสิ่งนี้แทนนั่นแหละ เราไม่จำเป็นต้อง Backup File โปรเจ็คพื้นที่เยอะ ๆ แต่เซฟความคืบหน้าแต่ละเวอร์ชั่นเอาไว้ อยากได้เวอร์ชั่นไหนก็กลับไปเรียกได้ตลอดเลย

โปรเจ็คจะใช้งานร่วมกับนักพัฒนาหลายคนได้ง่าย
ถ้าหากโปรเจ็คเรามีคนทำตั้งแต่ 1 ขึ้นไป อาจจะต้องปวดหัวกับขั้นตอนรวมโปรเจ็คก็ได้ ถ้าไม่ได้วางระบบที่ดีมากพอ

ยกตัวอย่าง แต่ละคนในทีมจะได้รับหน้าที่ทำระบบส่วนของตัวเอง
Git จะเข้ามาช่วยบันทึกเวอร์ชั่นต่าง ๆ ของระบบและเป็นตัวช่วยในการรวมโปรเจ็คให้อีกด้วย
(เนื่องจาก Git จะคอยบันทึกตลอดว่าระบบมีความเปลี่ยนแปลงส่วนไหนบ้าง ความเปลี่ยนแปลงระบบของทุกคนเมื่อมารวมกันก็จะได้เป็นงานที่สมบูรณ์)

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

ประเภทของ Git
ไม่เชิงจะเรียกว่าประเภทดีไหม แต่เอาเป็นว่ามาลองเข้าใจมันดูก่อน

1. Git Command Line (CML) ก็คือ Git แบบดั้งเดิมเลย หน้าตาโปรแกรมจะมีแค่ช่องให้เราพิมพ์คำสั่งลงไปเท่านั้น


หน้าตา Git ที่เวลาใช้ต้องพิมพ์แต่ละคำสั่งลงไป

2. Git GUI (graphical user interface) เป็นตัวโปรแกรมหน้าตาที่ดูทำมาให้มนุษย์เข้าใจมากขึ้น ตัวโปรแกรมนี้ก็จะไปเรียกใช้งานคำสั่ง Git แบบประเภทที่ 1 นั่นแหละ แต่เราไม่ต้องมานั่งพิมพ์คำสั่งเอาเอง ตัวโปรแกรมจะมีตัวช่วยต่าง ๆ ให้เราใช้งานคำสั่งพวกนั้นได้ง่ายขึ้น

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


หน้าตา Git GUI ที่มีหน้าตาใช้งานง่าย แตกต่างไปตามผู้พัฒนา
ที่มารูป https://gitforwindows.org/

มารู้จักกับคำศัพท์ที่เกี่ยวข้องกันเถอะ!
เพื่อจะใช้งาน Git ได้อย่างราบลื่นนั้น ก็ขอเชิญมา Lecture คำศัพท์ที่เกี่ยวข้องกันหน่อย
อย่างน้อยถึงไม่จำได้ทั้งหมด แต่ถ้าเข้าใจคำที่เกี่ยวข้องบ้าง น่าจะทำให้พอเข้าใจ Git มากขึ้นบ้างแน่นอน!

Repository
ตำแหน่งที่เก็บไฟล์ของ Git (เหมือนกับเราเก็บไฟล์บนไดร์ฟแล้วต้องมาแชร์ให้กันนั่นแหละ)
Git Repository มักจะมาในรูปแบบ URL ของเว็บซึ่งเป็นที่เก็บไฟล์ของเรา

Clone
Clone เป็นคำสั่งที่ใช้สำหรับนำไฟล์ที่เก็บบน Repository ดาวน์โหลดลงมาในเครื่องของเรา

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

Commit
Commit เป็นยืนยันว่าไฟล์ที่เรานำมา Stage ไว้จะถูกนำไปขึ้นบน Git จริง ๆ (ก็คือบันทึกการ Stage)
เมื่อ Commit แล้ว ไฟล์ที่แสดงอยู่ใน Stage จะหายไป เพื่อให้เราสามารถเลือกไฟล์อื่นนำมา Stage ต่อได้เรื่อย ๆ
** ทุกการ Commit ที่ดีจะต้องตั้งชื่อไว้ด้วย เพื่อระบุความคืบหน้าส่วนนี้เอาไว้
** และเป็นชื่อที่อ่านแล้วเข้าใจได้ทันที ว่าความคืบหน้าส่วนนี้คืออะไร


Push
เมื่อเรา Commit ไฟล์ที่ Commit ก็ยังอยู่ในเครื่องคอมพิวเตอร์ของเราคนเดียว การใช้คำสั่ง Push จะเป็นการส่ง Commit ทั้งหมดขึ้นมาบน Git Repository Server ทำให้ตอนนี้ ตัวคุณจากคอมเครื่องอื่น / เพื่อนร่วมโปรเจ็ค / คนทั้งโลก ก็จะเห็นความเปลี่ยนแปลงบน Repository นี้ได้แล้ว (ถ้าหากตั้งไว้ให้เห็นอะนะ)

Fetch
คำสั่ง Fetch เป็นการเช็คว่าไฟล์ที่เก็บบน Repository มีการเปลี่ยนแปลงบ้างรึเปล่า เช่น เพื่อนร่วมโปรเจ็คเราอาจจะบอกว่า Push งานขึ้นไปแล้ว เราก็สามารถ Fetch ดูได้ว่ามีอะไรเปลี่ยนแปลงบ้าง (ก็คือ F5)

Pull
การ Fetch เป็นเพียงการดูความเปลี่ยนแปลงเท่านั้น หากต้องการนำไฟล์ล่าสุดของโปรเจ็คเข้ามาลงในเครื่องของเรา จำเป็นต้องใช้คำสั่ง Pull ลงมา ไฟล์ล่าสุดจากโปรเจ็คที่เพื่อน ๆ ทำเอาไว้ ก็จะลงมาอยู่ในเครื่องของเรา
** อย่าลืม Commit งานปัจจุบันก่อนล่ะ)
** ปกติก่อนการ Pull จะมีการเรียกใช้ Fetch เพื่อดูความเปลี่ยนแปลงก่อนอัติโนมัติ
** ความจริงแล้ว การ Pull คือการใช้ Fetch + Merge พร้อมกัน ซึ่งจะไว้กล่าวในส่วนต่อไป




ต่อไปจะเป็นคำศัพท์ที่อาจจะเริ่มเข้าใจยากขึ้นมาเล็กน้อย

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


** ยกตัวอย่างรูปข้างบน again–

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

Dev Branch
ซึ่งมาจากชื่อเต็ม ๆ ว่า Develop Branch ทุกอย่างที่อยู่ในช่วงการพัฒนาจะบันทึกไว้บน Branch นี้ ซึ่งถ้าจะบอกว่าทุกอย่างในการพัฒนาอาจจะกว้างเกินไป ตามปกติจะมี Branch แยกย่อยเกิดขึ้นบนนี้เพิ่มเป็น Feature 1 2 3 … ย่อยไปอีก แต่ละ Branch นั้น ๆ จะมีการอัปเดตและติดตามเวอร์ชั่นของระบบนั้น ๆ เกิดขึ้นนั่นเอง
** เคยเห็นตอนดาวน์โหลดบางโปรแกรม แล้วจะมีให้เลือกเวอร์ชั่นเก่าแต่เสถียร กับเวอร์ชั่นใหม่ แต่ยังไม่เสถียร ใช่ไหม? หลักการคล้าย ๆ กัน

Checkout
มีหลาย Branch แล้วจะย้ายไปมายังไง คำตอบก็คือการ Checkout นั่นเอง
การใช้คำสั่ง Checkout จะเป็นการสลับไฟล์โปรเจ็คในคอมพิวเตอร์ตัวเองเป็นโปรเจ็คเวอร์ชั่น Branch อื่นได้ทันที
** คล้าย ๆ Check-In โรงแรม ใช่ไหมละ?
** ก่อนจะ Checkout ไปเข้า Branch อื่น อย่าลืมจัดการพวกความเปลี่ยนแปลงที่เกิดขึ้นปัจจุบันของเราให้เรียบร้อยก่อน เพราะพวกมันจะตามไปด้วย
** สามารถใช้คำสั่งนี้ในการเข้าไปดูไฟล์คนอื่นใน Branch เพื่อน ๆ ได้ด้วย เช่น เข้าไปแก้บัคให้ เป็นต้น


Merge
เนื่องจากตัวโปรเจ็คอาจจะมีหลาย Branch อย่างที่กล่าวข้างต้น การนำแต่ละ Branch มารวมเข้าด้วยกัน เรียกว่า Merge

Conflict
ถ้าการ Merge เรียบร้อยดีก็ไม่มีอะไรต้องกงวัล แต่ถ้าหากบังเอิ๊ญญ ทั้ง 2 Branch มีการแก้ไขในจุดเดียวกันพร้อมกัน ความเปลี่ยนแปลงที่มาชนกันนี้ จะเรียกว่า Conflict (ปัญหาจากการ Merge)
** Git จะแจ้งให้เราทราบเองว่า ไฟล์ไหนที่เกิดการ Conflict ขึ้นบ้าง
** ขึ้นอยู่กับ Git GUI ที่เราเลือกใช้ ว่ามีวิธีการจัดการ Conflict ให้อย่างไร เช่น บางโปรแกรมอาจจะเราเลือกได้เลย ว่าจะใช้ไฟล์จาก Branch ไหนเป็นตัวจริง ส่วนอีกตัวอาจจะถูกลบทิ้ง เป็นต้น


Pull Request
ก็นะ การอย่างที่ทราบว่า การ Merge เป็นการรวม Branch ด้วยกัน
การ Pull Request ก็คือการประกาศให้ทุกคนในทีมทราบว่า เรากำลังจะทำการ Merge Branch ทั้ง 2 เข้าไปรวมกันแล้ว ขอเชิญพ่อแม่พี่น้องเข้ามาช่วยตรวจสอบ มักจะเกิดขึ้นในโปรเจ็คที่ต้องการความรอบคอบ และเพื่อป้องกันการ Merge ที่ไม่หวังดีของคนที่เข้ามาทำลายโปรเจ็คเราด้วยเช่นกัน

เมื่อมีการเปิด Pull Request จะมีการเชิญให้สมาชิกในโปรเจ็คที่เกี่ยวข้องเข้ามาทำการ Approve (อนุมัติ) เมื่อความเปลี่ยนแปลงที่เราสร้างผ่านแล้ว จะสามารถ Merge และปิด Pull Request นี้ได้นั่นเอง

Approve
ก็คือการอนุมัติคำขอ Pull Request ที่ถูกสร้างขึ้นมาไว้จากข้อเมื่อกี้นั่นเอง


ก็จบกันไปแล้วกับการแนะนำ Git เบื้องต้น!
ไว้ถ้ายังไงอาจจะขอเชิญทุกท่านในเว็บที่สนใจมาทำโปรเจ็คร่วมกัน (ไม่รู้ว่าจะเกิดขึ้นไหมนะ555)

คะแนน

จำนวนผู้เข้าร่วม 3FAME +15 ย่อ เหตุผล
slost + 5 เนื้อหาดีมีสาระ
KZGtaye + 5
klakung25 + 5

ดูบันทึกคะแนน

 
 มีนามว่าklakung25 
 สมาชิกคนที่17 
 เพศ 
 ระดับการอ่าน90 
กระทู้ 
 ค่าประสบการณ์ 
 ทอง 
 ชื่อเสียง 
 ออนไลน์ 

คุณยังไม่ได้ใช้เหรียญ
กรุณาคลิกที่นี่เพื่อใช้เหรียญ

Jomonza [S] ★
Master of Devouring
     
โพสต์เมื่อ 2022-6-19 19:19:33 | แสดงโพสต์ทั้งหมด
จะเก๊ตกว่านี้ถ้าได้ลองใช้ในสนามจริง
คุณต้องเข้าสู่ระบบก่อนจึงจะสามารถตอบกลับโพสต์นี้ได้ เข้าสู่ระบบ | สมัครสมาชิก

รายละเอียดเครดิต

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้