หมายเหตุ: คุณสามารถขอgit rev-parse --short
SHA1 ที่สั้นที่สุดและมีเอกลักษณ์ได้
ดูที่ " git รับแฮชแบบสั้นจากแฮชปกติ "
git rev-parse --short=4 921103db8259eb9de72f42db8b939895f5651489
92110
อย่างที่คุณเห็นในตัวอย่างของฉัน SHA1 มีความยาว 5 แม้ว่าฉันจะระบุความยาวเป็น 4
สำหรับ repos ขนาดใหญ่ 7 รายการไม่เพียงพอตั้งแต่ปี 2010 และมอบ dce9648โดย Linus Torvalds (git 1.7.4.4, Oct 2010):
ค่าเริ่มต้นของ 7 มาจากการพัฒนาระบบคอมไพล์ค่อนข้างเร็วเมื่อเลขฐานสิบหกเจ็ดจำนวนมาก (ซึ่งครอบคลุมค่าแฮชประมาณ 250+ ล้านค่า)
ย้อนกลับไปตอนนั้นฉันคิดว่าการปรับปรุง 65k เป็นจำนวนมาก (มันเป็นสิ่งที่เรากำลังจะตีใน BK) และการแก้ไขแต่ละครั้งมีแนวโน้มที่จะมีวัตถุใหม่ประมาณ 5-10 ชิ้นดังนั้นวัตถุหนึ่งล้านจึงเป็นจำนวนมาก
(BK = BitKeeper)
วันนี้เคอร์เนลไม่ได้แม้โครงการคอมไพล์ที่ใหญ่ที่สุดและแม้กระทั่งเมล็ดมีประมาณ 220K แก้ไข ( มากใหญ่กว่าต้นไม้ BK เคยเป็น) และเรากำลังเข้าใกล้สองล้านวัตถุ
ณ จุดนี้เลขฐานสิบหกเจ็ดหลักยังคงไม่ซ้ำกันสำหรับพวกเขาจำนวนมาก แต่เมื่อเราพูดถึงเพียงสองคำสั่งของความแตกต่างขนาดระหว่างจำนวนวัตถุและขนาดแฮชจะมีการชนกันในค่าแฮชที่ถูกตัดทอน
มันไม่ได้ใกล้เคียงกับความไม่สมจริงอีกต่อไป - มันเกิดขึ้นตลอดเวลา
เราทั้งสองควรจะเพิ่มขึ้น abbrev เริ่มต้นที่มีขนาดเล็กบวก, และเพิ่มวิธีสำหรับคนที่การตั้งค่าเริ่มต้นของตัวเองต่อโครงการในไฟล์ config คอมไพล์
core.abbrev
ตั้งชื่อวัตถุความยาวเป็นตัวย่อ
หากไม่ได้ระบุคำสั่งจำนวนมากจะย่อไปยัง 7 hexdigits ซึ่งอาจไม่เพียงพอสำหรับชื่อวัตถุที่สั้นที่จะคงความเป็นเอกลักษณ์ในระยะเวลาที่เพียงพอ
environment.c
:
int minimum_abbrev = 4, default_abbrev = 7;
หมายเหตุ: เป็นความเห็นด้านล่างโดยmarco.m , core.abbrevLength
ถูกเปลี่ยนชื่อcore.abbrev
ใน Git เดียวกันกับที่ 1.7.4.4 ในการกระทำ a71f09f
เปลี่ยนชื่อcore.abbrevlength
กลับเป็นcore.abbrev
มันสอดคล้องกับ--abbrev=$n
ตัวเลือกบรรทัดคำสั่งหลังจากทั้งหมด
อีกไม่นาน Linus ได้เพิ่มe6c587c (สำหรับ Git 2.11, Q4 2016):
(ดังที่ได้กล่าวไว้ในคำตอบของMatthieu Moy )
ในวันแรก ๆ เราค่อนข้างจะตัดสินใจย่อชื่อออบเจ็กต์ลงไปที่ 7-hexdigits แต่เมื่อโครงการเติบโตขึ้นเรื่อย ๆ มันก็ยิ่งมีแนวโน้มที่จะเห็นชื่อออบเจ็กต์สั้น ๆ ที่เกิดขึ้นในวันก่อนหน้านี้
ปัจจุบันโครงการเคอร์เนล Linux ต้องการ 11 ถึง 12 hexdigits ในขณะที่ Git เองต้องการ 10 hexdigits เพื่อระบุวัตถุที่พวกเขามีในขณะที่โครงการขนาดเล็กจำนวนมากอาจยังคงดีกับค่าเริ่มต้น 7-hexdigit เดิม ขนาดเดียวไม่เหมาะกับทุกโครงการ
แนะนำกลไกที่เราประเมินจำนวนของวัตถุในที่เก็บตามคำขอแรกเพื่อย่อชื่อวัตถุด้วยการตั้งค่าเริ่มต้นและเกิดขึ้นกับการเริ่มต้นที่มีสติสำหรับพื้นที่เก็บข้อมูล ขึ้นอยู่กับความคาดหวังที่เราจะเห็นการชนกันในพื้นที่เก็บข้อมูลที่มี2^(2N)
วัตถุเมื่อใช้ชื่อวัตถุที่สั้นลงไปที่ N บิตแรกใช้จำนวน hexdigits เพียงพอที่จะครอบคลุมจำนวนของวัตถุในพื้นที่เก็บข้อมูล
hexdigit แต่ละตัว (4-bits) ที่เราเพิ่มไปยังชื่อที่สั้นลงทำให้เราสามารถมีวัตถุจำนวนมากเป็นสี่เท่า (2 บิต) ในที่เก็บ
ดูกระทำ e6c587c (1 ตุลาคม 2016) โดยLinus Torvalds (torvalds
)
ดูกระทำ 7b5b772 , กระทำ 65acfea (1 ตุลาคม 2016) โดยJunio C Hamano (gitster
)
(ผสานโดยJunio C Hamano - gitster
- in bb188d0 , 03 ต.ค. 2559)
คุณสมบัติใหม่นั้น (การคาดเดาค่าเริ่มต้นที่สมเหตุสมผลสำหรับค่าตัวย่อ SHA1) มีผลโดยตรงกับวิธีที่Git คำนวณหมายเลขรุ่นของตัวเองเพื่อนำออกใช้