नोट: आप git rev-parse --shortसबसे छोटे और अभी तक अद्वितीय SHA1 के लिए पूछ सकते हैं ।
" नियमित रूप से हैश से कम हैश देखें "
git rev-parse --short=4 921103db8259eb9de72f42db8b939895f5651489
92110
जैसा कि आप मेरे उदाहरण में देख सकते हैं कि SHA1 की लंबाई 5 है, भले ही मैंने 4 की लंबाई निर्दिष्ट की हो।
बड़े रेपो के लिए, 2010 के बाद से 7 पर्याप्त नहीं है, और खुद लिनुस टॉर्वाल्ड्स द्वारा dce9648 प्रतिबद्ध करें (1.7.4.4, अक्टूबर 2010 को git):
7 का डिफ़ॉल्ट जीआईटी विकास में काफी पहले से आता है, जब सात हेक्स अंक बहुत अधिक थे (यह लगभग 250+ मिलियन हवेल मूल्यों को शामिल करता है)।
फिर मैंने सोचा कि 65k संशोधन बहुत कुछ था (यह वही था जो हम बीके में हिट करने वाले थे), और प्रत्येक संशोधन में लगभग 5-10 नए ऑब्जेक्ट या तो होते हैं, इसलिए एक मिलियन ऑब्जेक्ट एक बड़ी संख्या थी।
(बीके = बिटकीपर)
इन दिनों, कर्नेल सबसे बड़ी git परियोजना भी नहीं है, और यहां तक कि कर्नेल में 220k संशोधन ( कभी बीके के पेड़ की तुलना में बहुत बड़ा है) और हम दो मिलियन ऑब्जेक्ट्स से संपर्क कर रहे हैं।
उस बिंदु पर, सात हेक्स अंक अभी भी उनमें से बहुत कुछ के लिए अद्वितीय है, लेकिन जब हम वस्तुओं की संख्या और हैश आकार के बीच परिमाण के अंतर के सिर्फ दो आदेशों के बारे में बात कर रहे हैं, तो काटे गए हैश मूल्यों में टकराव होंगे ।
यह अब अवास्तविक के करीब भी नहीं है - यह हर समय होता है।
हम दोनों को डिफ़ॉल्ट abbrev को बढ़ाना चाहिए जो कि अनुचित रूप से छोटा था, और लोगों के लिए git config फाइल में अपने स्वयं के डिफ़ॉल्ट प्रति प्रोजेक्ट को सेट करने का एक तरीका जोड़ें ।
core.abbrev
लंबाई की वस्तु के नाम संक्षिप्त करें।
यदि अनिर्दिष्ट है, तो कई कमांड 7 हेक्सिडिज के लिए संक्षिप्त हैं, जो संक्षिप्त नाम के लिए पर्याप्त रूप से लंबे समय तक अद्वितीय रहने के लिए पर्याप्त नहीं हो सकता है।
environment.c:
int minimum_abbrev = 4, default_abbrev = 7;
नोट: जैसा कि नीचे marco.m द्वारा टिप्पणी की गई थी , उसी core.abbrevLengthनाम से इसका नाम बदल दिया गया था। core.abbrev1.7.4.4 कमिट में a71f09f
नाम बदलें core.abbrevlengthकरने के लिए वापसcore.abbrev
यह --abbrev=$nसब के बाद कमांड लाइन विकल्प से मेल खाती है ।
हाल ही में, लिनस ने प्रतिबद्ध e6c587c (Git 2.11, Q4 2016 के लिए) में जोड़ा :
(जैसा कि मैथ्यू मोय के जवाब में बताया गया है )
काफी शुरुआती दिनों में हमने किसी तरह 7-hexdigits के नीचे ऑब्जेक्ट नामों को संक्षिप्त करने का निर्णय लिया, लेकिन जैसे-जैसे प्रोजेक्ट बढ़ते हैं, यह पहले के दिनों में किए गए ऐसे शॉर्ट ऑब्जेक्ट नामों को देखने के लिए अधिक से अधिक हो रहा है और लॉग संदेशों में दर्ज नहीं रह गया है।
वर्तमान में लिनक्स कर्नेल प्रोजेक्ट को 11 से 12 हेक्सिडिज की जरूरत है, जबकि गिट को खुद की वस्तुओं की विशिष्ट पहचान करने के लिए 10 हेक्सिडिज की जरूरत है, जबकि कई छोटी परियोजनाएं मूल 7-हेक्सिडिज डिफ़ॉल्ट के साथ अभी भी ठीक हो सकती हैं। एक-आकार सभी परियोजनाओं के लिए फिट नहीं है।
एक तंत्र का परिचय दें, जहां हम पहले ऑब्जेक्ट पर डिफ़ॉल्ट सेटिंग के साथ एक वस्तु का नाम संक्षिप्त करने के लिए भंडार में वस्तुओं की संख्या का अनुमान लगाते हैं और भंडार के लिए एक डिफ़ॉल्ट डिफ़ॉल्ट के साथ आते हैं। इस उम्मीद के आधार पर कि हम 2^(2N)ऑब्जेक्ट्स के साथ एक रिपॉजिटरी में टकराव देखेंगे जब ऑब्जेक्ट नामों को पहले एन बिट्स के लिए छोटा किया जाता है, रिपॉजिटरी में ऑब्जेक्ट्स की संख्या को कवर करने के लिए पर्याप्त संख्या में हेक्सिडिट्स का उपयोग करें।
प्रत्येक हेक्सिडिटिज (4-बिट्स) जिसे हम संक्षिप्त नाम से जोड़ते हैं, हमें रिपॉजिटरी में कई वस्तुओं के रूप में चार गुना (2-बिट्स) करने की अनुमति देता है।
Linus Torvalds ( ) द्वारा प्रतिबद्ध e6c587c (01 अक्टूबर 2016) देखें ।
देखें प्रतिबद्ध 7b5b772 , प्रतिबद्ध 65acfea (01 अक्टू 2016) द्वारा Junio सी Hamano ( ) । (द्वारा विलय Junio सी Hamano - - में bb188d0 प्रतिबद्ध , 03 अक्टू 2016)torvalds
gitster
gitster
उस नई संपत्ति (SHA1 abbrev मूल्य के लिए एक उचित डिफ़ॉल्ट का अनुमान लगाते हुए) का सीधा प्रभाव होता है कि कैसे Git रिलीज के लिए अपने स्वयं के संस्करण संख्या की गणना करता है ।