หลังจากทำงานหนักมาสองเดือน ชุมชนพัฒนาของ Git เปิดตัว Git เวอร์ชัน 2.51 การอัพเดตที่ รวบรวมการเปลี่ยนแปลง 506 รายการ โดยมีนักพัฒนา 91 รายเข้าร่วม โดยมีผู้บริจาคเป็นครั้งแรกจำนวน 21 ราย
รุ่นนี้แนะนำการปรับปรุงที่ออกแบบมาเพื่อปรับปรุงประสิทธิภาพและลดความซับซ้อนในการจัดการที่เก็บข้อมูล รวมถึงการเพิ่มประสิทธิภาพประสิทธิภาพสำหรับ git-push และ git-fetch เช่นเดียวกับการเปลี่ยนแปลงหลายประการที่เคลื่อนไปสู่สาขา 3.x ใหม่
Git 2.51 คุณสมบัติใหม่ที่สำคัญ
จุดเด่นอย่างหนึ่งของ Git 2.51 คือ การเพิ่มประสิทธิภาพคำสั่ง git push และ git fetch ในคลังข้อมูลที่มีการอ้างอิงจำนวนมาก กุญแจสำคัญของการปรับปรุงนี้อยู่ที่การอัปเดตเป็นชุดซึ่งประมวลผลลิงก์หลายรายการในธุรกรรมเดียวแทนที่จะประมวลผลทีละรายการ
ด้วยการเพิ่มประสิทธิภาพนี้ ตอนนี้แบ็กเอนด์ที่สามารถอ้างอิงได้นั้นทำงานได้ดีกว่าแบ็กเอนด์ไฟล์แบบดั้งเดิมในการทดสอบกับที่เก็บข้อมูลที่มีการอ้างอิงสูงสุดถึง 10 รายการ ประสิทธิภาพของ git fetch เพิ่มขึ้น 000 เท่าสำหรับ reftable และ 22 เท่าสำหรับไฟล์ ในขณะที่ git push ได้รับการปรับปรุงดีขึ้น 1.25 เท่าและ 18 เท่า ตามลำดับ
นวัตกรรมที่สำคัญอีกประการหนึ่งคือ iการแนะนำสิ่งที่เรียกว่าแพ็คเกจ cruft ออกแบบมาเพื่อจัดเก็บวัตถุที่ไม่สามารถเข้าถึงได้ซึ่งไม่ได้เชื่อมโยงกับสาขาหรือแท็ก วัตถุเหล่านี้ซึ่งก่อนหน้านี้กระจัดกระจาย ตอนนี้สามารถจัดการในบรรจุภัณฑ์แยกกันได้s ซึ่งทำให้ควบคุมได้ง่ายขึ้นและลดขนาดของดัชนีหลายแพ็คเกจ (MIDX)
ด้วย การตั้งค่า repack.MIDXMustContainCruft ใหม่ Git หลีกเลี่ยงการรวมวัตถุเหล่านี้ไว้ในดัชนีหลักในการทดสอบบน GitHub การกำหนดค่านี้ลดขนาดดัชนีลง 38% เร่งการเขียนขึ้น 35% และปรับปรุงการอ่านขึ้น 5%
แนวทางใหม่ในการบรรจุภัณฑ์วัตถุ
El คำสั่ง git pack-objects รวมตัวเลือก –path-walk ซึ่งนำเสนอวิธีการใหม่ เพื่อจัดระเบียบไฟล์บรรจุภัณฑ์ใหม่ แทนที่จะประมวลผลอ็อบเจ็กต์ตามค่าแฮช Git สามารถวนซ้ำอ็อบเจ็กต์เหล่านั้นตามเส้นทางไฟล์ได้ โดยแพ็กอ็อบเจ็กต์ที่อยู่ในตำแหน่งเดียวกันเข้าด้วยกัน วิธีนี้ช่วยลดความจำเป็นในการจัดเรียงอ็อบเจ็กต์ล่วงหน้า และส่งผลให้ไฟล์แพ็กมีขนาดเล็กลงและมีประสิทธิภาพมากขึ้น
กับเวอร์ชั่นนี้ด้วย รูปแบบใหม่สำหรับการแลกเปลี่ยนสถานะของต้นไม้ทำงานและดัชนีที่สร้างด้วย Git Stash ได้รับการทำให้เป็นมาตรฐานแล้วตอนนี้สามารถส่งออกและนำเข้าข้อมูลแบบสาขาหรือแท็กได้แล้ว ทำให้การย้ายสถานะจากระบบหนึ่งไปยังอีกระบบหนึ่งง่ายขึ้น
ตัวอย่างเช่น:
git stash export --to-ref refs/stashes/mi-stash git push origin refs/stashes/mi-stash git fetch origin '+refs/stashes/*:refs/stashes/*' git stash import refs/stashes/mi-stash
การปรับปรุงคำสั่งคลาสสิก
varios คำสั่ง Git ได้รับการอัปเดตที่เกี่ยวข้อง:
- ตอนนี้ git cat-file จะรายงานวัตถุและซับโมดูลที่หายไป โดยแสดงตัวระบุแทนที่จะทำเครื่องหมายว่า "หายไป" เท่านั้น
- git log ได้รับประโยชน์จากการปรับปรุงตัวกรอง Bloom ซึ่งช่วยเพิ่มความเร็วในการค้นหาด้วยเส้นทางไฟล์หลายเส้นทาง
- คำสั่ง git switch และ git restore ซึ่งถือเป็นแบบทดลองตั้งแต่ปี 2019 ในที่สุดก็ได้รับการยืนยันให้เป็นทางเลือกที่ทันสมัยแทน git checkout แล้ว
- คำสั่ง git whatchanged ซึ่งเทียบเท่ากับ git log –raw ไม่ได้รับการสนับสนุนอีกต่อไปและจะถูกลบออกใน Git 3.0
- git for-each-ref ได้รับตัวเลือก –start-after ซึ่งเมื่อใช้ร่วมกับ –count จะทำให้สามารถแบ่งหน้าเอาต์พุตได้
- ตอนนี้ git merge และ git pull รวมตัวเลือก –compact-summary ไว้ด้วย ซึ่งให้รูปแบบสรุปที่กระชับยิ่งขึ้น
การสนับสนุน C99 และกฎการสนับสนุนใหม่
Git ยังคงปรับโค้ดให้เข้ากับคุณลักษณะของมาตรฐาน C99. แม้ว่าจะต้องมีคอมไพเลอร์ที่เข้ากันได้ตั้งแต่ปี 2021 นักพัฒนาก็ดำเนินการอย่างระมัดระวังเพื่อรักษาความเข้ากันได้กับคอมไพเลอร์ที่ใช้งานเพียงบางส่วนเท่านั้น
นอกจากนี้ ยังมีการเปลี่ยนแปลงที่สำคัญในนโยบายการสนับสนุน: ตอนนี้สามารถส่งแพตช์ภายใต้นามแฝงได้แล้วการตัดสินใจที่สอดคล้องกับกฎของเคอร์เนล Linux และได้รับการออกแบบเพื่อมอบความยืดหยุ่นที่มากขึ้นให้กับผู้สนับสนุน
มองไปข้างหน้าสู่ Git 3.0
El ทีมพัฒนาได้อัปเดตแผนงานเป็น Git 3.0 แล้วซึ่งมีการเปลี่ยนแปลงสำคัญสองประการ ได้แก่ การใช้ SHA-256 เป็นค่าเริ่มต้นเป็นตัวระบุออบเจ็กต์ และการนำรูปแบบ reftable มาใช้เพื่อจัดเก็บการอ้างอิงสาขาและแท็ก การปรับปรุงเหล่านี้มีจุดมุ่งหมายเพื่อปรับปรุงความปลอดภัยและประสิทธิภาพในคลังข้อมูลที่มีขนาดใหญ่และซับซ้อนมากขึ้นเรื่อยๆ
Fuente: https://lore.kernel.org