บทนำสู่ Git

เผยแพร่แล้ว: 2022-06-30

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

ภายใต้ทุกเว็บไซต์ มีการรันโค้ด — ไม่ว่าคุณจะใช้ WordPress, WooCommerce, Drupal, Magento, NextJS หรือแม้แต่ HTML ที่เขียนด้วยมือ มีชุดของไฟล์ที่จำเป็นในการทำให้แต่ละหน้าแสดงผลและแสดงเนื้อหาไปทั่วโลก

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

นี่คือที่มาของ Git อ่านต่อเพื่อเรียนรู้เกี่ยวกับ Git การทำงานกับที่เก็บ Git ระยะไกล และอื่นๆ

ทำความเข้าใจ Git

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

ประวัติโดยย่อ

ย้อนกลับไปในปี 2548 ทีมนักพัฒนาได้สร้างโปรเจ็กต์ที่เรียกว่า Linux ซึ่งเป็นระบบปฏิบัติการโอเพ่นซอร์สฟรี พวกเขาต้องการวิธีสื่อสารการเปลี่ยนแปลงระหว่างผู้มีส่วนร่วมหลายร้อยคนได้อย่างง่ายดาย ในขั้นต้น พวกเขาได้ส่งต่อแพทช์แต่ละส่วนที่มีโค้ดที่อัปเดตแล้ว แต่สิ่งนี้พิสูจน์ได้ว่ามีปัญหาในหลายด้าน โดยเฉพาะอย่างยิ่งเมื่อพิจารณาว่าชุดการเปลี่ยนแปลงใด "จริง" และเวอร์ชันล่าสุดของชุดการเปลี่ยนแปลงใดโดยเฉพาะ

ด้วยความผิดหวังจากปัญหาเหล่านี้ โปรเจ็กต์ Linux ทำให้ Linus Torvald ใช้แนวคิดที่ค่อนข้างแปลกใหม่สำหรับโปรเจ็กต์เพื่อแชร์ codebase ทั้งหมดระหว่างนักพัฒนา และรับ "snapshots" ของการเปลี่ยนแปลงที่เรียกว่า commits ซึ่งสามารถแชร์และรวมเข้ากับสำเนาอื่นๆ ของ รหัสได้ทุกที่ในโลก สิ่งนี้ช่วยในการสื่อสารในทันที เนื่องจากการเปลี่ยนแปลงโครงการทั้งหมดสามารถถูกมองว่าเป็นประวัติเดียว

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

กราฟของการเปลี่ยนแปลง

ตามแนวคิดแล้ว คุณสามารถคิดว่า Git เป็นกราฟของโหนด โดยที่แต่ละโหนดเป็นภาพรวมของโปรเจ็กต์ทั้งหมดในช่วงเวลาหนึ่ง หนังสือ Git มากกว่าบน git-scm.com สรุปโครงสร้างของสแนปชอต

Git เก็บข้อมูลเป็นสแน็ปช็อตของโปรเจ็กต์เมื่อเวลาผ่านไป

กลุ่มสแนปชอตนี้สร้างกราฟเมื่อเวลาผ่านไป โดยจะมีเวอร์ชันล่าสุดอยู่ด้านหน้า หรือที่ด้านบนสุดของประวัติการเปลี่ยนแปลงของคุณ สแนปชอตแต่ละรายการจะเรียกว่า "คอมมิต" ใน Git

ต่อไปนี้คือภาพรวมคร่าวๆ ว่าโปรเจ็กต์ Git จะเป็นอย่างไรหากคุณใส่การเปลี่ยนแปลงล่าสุดไว้ที่ด้านบนสุดของกราฟ หมายเหตุ — ตัวอย่างนี้ใช้ GitKraken Git GUI เพื่อแสดงภาพกราฟ

ตัวอย่าง git graph

การสร้างกราฟ Git

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

เมื่อทำงานในพื้นที่ การเปลี่ยนแปลงทั้งหมดที่คุณบันทึกในโครงการจะอยู่ใน "Working Directory" Git สามารถดูการเปลี่ยนแปลงเหล่านั้นได้ แต่ยังไม่ทราบว่าคุณต้องการส่งการเปลี่ยนแปลงใด คุณจะต้องบอก Git อย่างชัดเจนถึงการเปลี่ยนแปลงที่คุณต้องการคอมมิตโดยใช้คำสั่งที่เรียกว่า “git add” เพื่อเพิ่มไฟล์เฉพาะเหล่านั้นลงใน “staging area” ของ Git

เมื่อคุณมีการเปลี่ยนแปลงไฟล์ที่คุณต้องการคอมมิตกับกราฟของสแนปชอตของโปรเจ็กต์แล้ว คุณสามารถใช้คำสั่ง “Git commit” เพื่อสร้างสแนปชอตนั้นบนกราฟอย่างถาวร

ขั้นตอนการเพิ่มและคอมมิต Git

ย้อนเวลากลับไป

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

หากการคอมมิตล่าสุดที่คุณทำผิดพลาด หรือคุณเปลี่ยนใจเกี่ยวกับสิ่งที่คุณทำ คุณสามารถ “เปลี่ยน Git” เพื่อคืนค่าการคอมมิตของ Git สิ่งนี้จะสร้างคอมมิตใหม่บนกราฟที่เพียงแค่เลิกทำการเปลี่ยนแปลงที่คุณเพิ่งทำ

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

พลังของการแตกแขนงและการผสานใน Git

หนึ่งในคุณสมบัติที่ทรงพลังที่สุดที่ Git มอบให้คือความสามารถในการสร้างความเป็นจริงทางเลือกคู่ขนาน ไม่มีจริงๆ.

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

เมื่อคุณได้ทำการเปลี่ยนแปลงในสาขาคุณลักษณะของคุณแล้ว คุณสามารถใช้การเปลี่ยนแปลงทั้งหมดกับสาขาหลักได้โดยดำเนินการรวม Git

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

การรวม Git ยังช่วยให้คุณสามารถดึงการเปลี่ยนแปลงจากสาขาหลักไปยังสาขาคุณลักษณะได้ สิ่งนี้ทำให้คุณสามารถตรวจสอบให้แน่ใจว่าการอัปเดตที่ทำกับสาขาหลักจะยังคงทำงานกับการเปลี่ยนแปลงที่คุณเสนอ ก่อนที่คุณจะพยายามรวมเข้ากับ “main”

หากคุณกำลังทำงานกับทีม กลยุทธ์การแยกสาขาของ Git สามารถมั่นใจได้ว่าทีมของคุณสามารถทดสอบการเปลี่ยนแปลงอย่างละเอียดก่อนที่จะดำเนินการผลิต และให้วิธีที่ตรงไปตรงมาในการจัดการกระบวนการ

การทำงานกับที่เก็บระยะไกลใน Git

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

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

อีกแง่มุมหนึ่งที่ทำให้ Git สามารถปรับขนาดได้มากคือ ถ้าคุณเปลี่ยนเอกสาร คุณไม่จำเป็นต้องเก็บสำเนาใหม่ของเอกสารนั้นทั้งหมด การเปลี่ยนแปลงจะถูกจัดเก็บเป็นแพ็กเก็ตข้อมูลเล็กๆ ที่เรียกว่า "เดลตา" และเฉพาะบรรทัดที่แก้ไขแต่ละรายการของไฟล์และข้อมูลเล็กน้อยเกี่ยวกับการเปลี่ยนแปลงเท่านั้นคือสิ่งที่ Git ต้องการในการจัดเก็บหรือแชร์ เดลต้ามีน้ำหนักเบามาก โดยมักมีขนาดเพียงไม่กี่ไบต์ ตัวอย่างเช่น ถ้าคุณเปลี่ยนบรรทัดเดียวในเอกสารขนาด 100KB เดลต้าจะมีขนาดเพียง 20 ไบต์หรือประมาณนั้น

เพื่อให้ทุกอย่างสอดคล้องและสอดคล้องกันในสำเนาทั้งหมดของที่เก็บ คุณเพียงแค่กำหนดว่าสำเนาใดที่อยู่ในคอมพิวเตอร์เครื่องใดเป็นสำเนา "จริง" ของโครงการ จากนั้นตรวจสอบให้แน่ใจว่าคอมมิตของคุณสร้างสำเนานั้น

วิธีนี้ใช้ได้ผลเช่นเดียวกัน เมื่อทำงานร่วมกับผู้อื่น คุณสามารถดึงการเปลี่ยนแปลงของพวกเขาลงในสำเนาในเครื่องของที่เก็บเพื่อให้แน่ใจว่าสำเนาของโครงการในเครื่องของคุณเป็นปัจจุบัน

โมเดล git ของการทำงานกับที่เก็บระยะไกล

มีบริษัทหลายแห่งที่ทำงานร่วมกันบนที่เก็บระยะไกลได้ง่ายและจัดการได้ง่ายมาก แพลตฟอร์มเช่น GitHub, GitLab และ BitBucket เสนอเครื่องมือโฮสต์ที่เก็บ Git ออนไลน์และการทำงานร่วมกัน มีที่เก็บ Git หลายล้านที่ออนไลน์ที่จัดการโดยนักพัฒนาหลายล้านคน และ Git ติดตามทุกแหล่งของความจริง ไม่ว่าผู้คนจะร่วมมือกันมากแค่ไหนก็ตาม

สิ่งที่ไม่ควรจัดเก็บใน Git

มาพูดถึงสิ่งที่คุณไม่ควรทำกับ Git กันดีกว่า ในขณะที่ Git นั้นยอดเยี่ยมในการแชร์โค้ดและติดตามการเปลี่ยนแปลงเมื่อเวลาผ่านไป มีงานบางอย่างที่ไม่เหมาะกับโมเดลนี้ โชคดีที่ Git มีวิธีที่สะดวกแก่เราในการบอกให้มันเพิกเฉยต่อสิ่งต่าง ๆ ที่เรียกว่าไฟล์ “.gitignore”

หากมีไฟล์ “.gitiginore” Git จะตรวจสอบกับไฟล์นั้นเพื่อดูว่าควรดูรายการเหล่านั้นหรือไม่ ภายใน ".gitiginore" คุณสามารถระบุชื่อไฟล์แต่ละชื่อ ไดเรกทอรีทั้งหมด หรือไฟล์ทั้งประเภทได้ ตัวอย่างเช่น หากคุณต้องการยกเว้นไฟล์ .png และ .jpg ทั้งหมด และโฟลเดอร์ "wp-content/uploads" ทั้งหมดของคุณ ในไฟล์ ".gitiginore" คุณเพียงแค่เขียนว่า:

 *.png *.jpg wp-content/uploads

เหตุใดจึงยกเว้นไฟล์มีเดียจาก Git

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

เชื่อหรือไม่ คุณอาจไม่ต้องการติดตามการเปลี่ยนแปลงใน WordPress เอง มีเหตุผลสองสามประการสำหรับเรื่องนี้

อย่างแรก มีคำพูดเก่าๆ เกี่ยวกับ CMS ว่า "อย่าแฮ็คคอร์!" ไม่ควรมีอะไรที่คุณกำลังเปลี่ยนแปลงในแกนหลักของ WordPress ที่จะต้องถูกติดตาม การอัปเดตใดๆ จะต้องมาจาก WordPress เอง และหากคุณต้องการเวอร์ชันก่อนหน้า ก็สามารถระบุได้อย่างง่ายดายเมื่อคุณติดตั้ง คุณสามารถจัดเก็บการติดตั้ง WordPress ทั้งหมดใน Git ได้อย่างแน่นอน แต่ในบางสถานการณ์อาจมีประโยชน์ไม่มาก คุณเพียงต้องการติดตามการเปลี่ยนแปลงในโค้ดที่คุณกำลังจัดการ เช่น ปลั๊กอินที่กำหนดเองและธีมย่อย เป็นความคิดที่ดีที่จะตรวจสอบกับผู้ให้บริการโฮสติ้งของคุณเพื่อขอคำแนะนำในหัวข้อนี้

ประการที่สอง หากคุณวางแผนที่จะสนับสนุน WordPress คุณจะพบว่ามีการดูแลผ่านระบบควบคุมเวอร์ชันเก่าที่เรียกว่า SVN โมเดลนี้ต้องการโครงสร้างพื้นฐานของเซิร์ฟเวอร์ส่วนกลางและเป็นที่นิยมน้อยกว่ามากเมื่อเทียบกับ Git แต่ WordPress นั้นเก่ากว่า Git การทำงานกับระบบแพตช์ SVN นั้นแตกต่างกันเล็กน้อย และคุณควรอ่านเอกสารประกอบสำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้

บทสรุป

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

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

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

Git ใช้งานได้ฟรี และ Git GUI ส่วนใหญ่ เช่น GitKraken มีเวอร์ชันฟรี ไม่มีเหตุผลใดที่คุณไม่ควรใช้ Git เพื่อติดตามงานของคุณ ดังนั้น "Git" ถึงมัน!

แหล่งข้อมูลที่เกี่ยวข้อง

- WordPress Local Development ด้วย XAMPP

- การใช้ Git และเวิร์กโฟลว์ขั้นสูง

- Git Hooks

- ไซต์ Dev คืออะไร?

- แคชสำหรับ WordPress