Git 2.51 มาพร้อมกับการปรับปรุงประสิทธิภาพที่สำคัญและฟีเจอร์ใหม่

คอมไพล์ 2.51

หลังจากทำงานหนักมาสองเดือน ชุมชนพัฒนาของ 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