Git 2.39 ซอร์สคอนโทรลรีลีส

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

เมื่อเทียบกับรุ่นก่อนหน้า เวอร์ชันใหม่มีการเปลี่ยนแปลง 483 รายการ ซึ่งเตรียมโดยการมีส่วนร่วมของนักพัฒนา 86 คน โดย 31 คนมีส่วนร่วมในการพัฒนาเป็นครั้งแรก นวัตกรรมหลัก:

  • คำสั่ง “git shortlog” ออกแบบมาเพื่อแสดงสรุปพร้อมสถิติจากประวัติการเปลี่ยนแปลง ได้เพิ่มตัวเลือก “-group” สำหรับการจัดกลุ่มการคอมมิตตามอำเภอใจตามฟิลด์ที่ไม่จำกัดเฉพาะผู้สร้างหรือคอมมิต ตัวอย่างเช่น หากต้องการแสดงรายการนักพัฒนาพร้อมข้อมูลเกี่ยวกับจำนวนการเปลี่ยนแปลง โดยคำนึงถึงผู้ช่วยเหลือที่กล่าวถึงในช่อง "เขียนร่วมโดย" คุณสามารถใช้คำสั่ง: git shortlog -ns --group=author - -group=trailer:ร่วมเขียนโดย

    เอาต์พุต Shortlog สามารถรวบรวมได้โดยใช้ตัวระบุการจัดรูปแบบ และตัวเลือก “--group” ช่วยลดความยุ่งยากในการสร้างรายงานที่ซับซ้อนได้อย่างมาก และไม่จำเป็นต้องใช้คำสั่งการเรียงลำดับเพิ่มเติม ตัวอย่างเช่น หากต้องการสร้างรายงานที่มีข้อมูลเกี่ยวกับจำนวนคอมมิตสำหรับรีลีสหนึ่งๆ ที่ได้รับการยอมรับในแต่ละเดือน คุณสามารถระบุ: git shortlog v2.38.0.. —date='format:%Y-%m' —group=' %cd' -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12 ก่อนหน้านี้ เพื่อดำเนินการที่คล้ายกัน คุณจะต้องใช้ยูทิลิตี้ sort และ uniq: git log v2.38.0 .. —date='format:%Y -%m' —format='%cd' | เรียงลำดับ | ยูนิค -ซี

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

    ระยะเวลาที่วัตถุที่ไม่สามารถเข้าถึงได้ยังคงอยู่ในพื้นที่เก็บข้อมูลก่อนที่จะถูกลบออกจริงจะถูกกำหนดโดยตัวเลือก “—prune=” " อย่างไรก็ตาม แม้ว่าการหน่วงเวลาก่อนที่จะลบเป็นวิธีที่มีประสิทธิภาพและใช้งานได้จริงในการป้องกันความเสียหายของพื้นที่เก็บข้อมูลเนื่องจากสภาพการแข่งขัน แต่ก็ไม่น่าเชื่อถือ 100% เพื่อให้ง่ายต่อการกู้คืนพื้นที่เก็บข้อมูลที่เสียหาย รีลีสใหม่ให้ความสามารถในการบันทึกอ็อบเจ็กต์ที่หายไปโดยการเพิ่มตัวเลือก “--expire-to” ให้กับคำสั่ง “git repack” ซึ่งช่วยให้คุณระบุไฟล์เพื่อสร้างไฟล์ภายนอก สำเนาของวัตถุที่ถูกลบทั้งหมด ตัวอย่างเช่น หากต้องการบันทึกอ็อบเจ็กต์ที่ไม่สามารถเข้าถึงได้ซึ่งไม่มีการเปลี่ยนแปลงในช่วง 5 นาทีที่ผ่านมาในไฟล์ backup.git คุณสามารถใช้คำสั่ง: git repack --cruft --cruft-expiration=5. minutes.ago -d --expire -to=../backup.git

  • เพิ่มความเร็วของการดำเนินการ "git grep -cached" อย่างมีนัยสำคัญ (สูงสุด 70%) เมื่อค้นหาในพื้นที่ที่ใช้การโคลนบางส่วน (ชำระเงินแบบกระจัดกระจาย) และมีดัชนีบางส่วน (ดัชนีแบบกระจัดกระจาย) ก่อนหน้านี้เมื่อระบุตัวเลือก "-cached" การค้นหาจะดำเนินการก่อนในดัชนีปกติและจากนั้นในบางส่วนซึ่งนำไปสู่ความล่าช้าที่เห็นได้ชัดเจนเมื่อค้นหาในที่เก็บข้อมูลขนาดใหญ่
  • การตรวจสอบความถูกต้องของเซิร์ฟเวอร์ในการเชื่อมโยงกันของออบเจ็กต์ใหม่ก่อนที่จะถูกวางไว้ในพื้นที่เก็บข้อมูลระหว่างการดำเนินการ "git push" ได้รับการเร่งความเร็วแล้ว ด้วยการเปลี่ยนไปใช้การบัญชีเฉพาะลิงก์ที่ประกาศเมื่อทำการตรวจสอบ ในพื้นที่เก็บข้อมูลทดสอบที่มีลิงก์ 7 ล้านลิงก์ ซึ่งครอบคลุมเพียง 3% ของการดำเนินการแบบพุช การปรับให้เหมาะสมทำให้สามารถลดเวลาในการตรวจสอบลงได้ 4.5 เท่า
  • เพื่อป้องกันการล้นของจำนวนเต็มที่อาจเกิดขึ้นในโค้ด คำสั่ง "git Apply" จะจำกัดขนาดสูงสุดของแพตช์ที่สามารถประมวลผลได้ หากขนาดแพตช์เกิน 1 GB ข้อผิดพลาดจะปรากฏขึ้น
  • เพื่อป้องกันช่องโหว่ที่อาจเกิดขึ้น มีการเปลี่ยนแปลงเพื่อล้างข้อมูลที่ไม่จำเป็นจากส่วนหัวที่ตั้งค่าไว้เมื่อใช้โมดูล h2h3 ที่มีตัวเลือก GIT_TRACE_CURL=1 หรือ GIT_CURL_VERBOSE=1 ร่วมกับ HTTP/2
  • เมื่อดำเนินการเช็คเอาต์สาขาที่เป็นลิงก์สัญลักษณ์ไปยังสาขาอื่น คำสั่ง "git symbolic-ref HEAD" จะแสดงชื่อของสาขาเป้าหมายแทนที่จะเป็นชื่อของ symlink
  • เพิ่มการรองรับอาร์กิวเมนต์ @{-1} ให้กับตัวเลือก “--edit-description” (“สาขา git —edit-description @{-1}”) สำหรับการแก้ไขคำอธิบายของสาขาก่อนหน้า
  • เพิ่มคำสั่ง "git merge-tree --stdin" เพื่อส่งรายการตัวเลือกผ่านอินพุตมาตรฐาน
  • บนระบบไฟล์เครือข่าย ตัวจัดการ fsmonitor ซึ่งมอนิเตอร์การเปลี่ยนแปลงในระบบไฟล์ จะถูกปิดใช้งานตามค่าดีฟอลต์

ที่มา: opennet.ru

เพิ่มความคิดเห็น