मुझे यह पता लगाने दें कि यह गिट आंतरिक का उपयोग करके एक चुनौतीपूर्ण समस्या क्यों है। आप
#!/bin/bash
commit=$(git cat-file commit HEAD) #
sha1=($((printf "commit %s\0" $(echo "$commit" | wc -c); echo "$commit") | sha1sum))
echo ${sha1[0]}
अनिवार्य रूप से आप संदेश git cat-file commit HEAD
द्वारा दिया पर एक SHA1 चेकसम चलाने से वर्तमान की SHA1 प्रतिबद्ध मिल सकती है। जब आप इस संदेश की जांच करते हैं तो दो चीजें तुरंत एक समस्या के रूप में बाहर निकलती हैं। एक पेड़ sha1 है और दूसरा प्रतिबद्ध समय है।
अब प्रतिबद्ध समय आसानी से संदेश को बदलकर और अनुमान लगाया जाता है कि किसी विशिष्ट समय पर प्रतिबद्ध करने या शेड्यूल करने में कितना समय लगता है। सही मुद्दा पेड़ sha1 है, जिसे आप git ls-tree $(git write-tree) | git mktree
से प्राप्त कर सकते हैं। अनिवार्य रूप से आप ls-tree से संदेश पर sha1 चेकसम कर रहे हैं, जो सभी फ़ाइलों और उनके sha1 चेकसम की एक सूची है।
इसलिए आपकी प्रतिबद्धता sha1 चेकसम आपके पेड़ sha1 चेकसम पर निर्भर करती है, जो सीधे फाइल sha1 चेकसम पर निर्भर करती है, जो सर्कल को पूरा करती है और प्रतिबद्ध sha1 पर निर्भर करती है। इस प्रकार आपके पास उपलब्ध तकनीकों के साथ एक परिपत्र समस्या है।
less secure checksums के साथ, फाइल को फ़ाइल में चेकसम को ब्रूट फोर्स के माध्यम से लिखना संभव दिखाया गया है; हालांकि, मुझे किसी भी काम के बारे में पता नहीं है जिसने sha1 के साथ उस कार्य को पूरा किया। यह असंभव नहीं है, लेकिन हमारी वर्तमान समझ के साथ असंभव के बगल में (लेकिन जो कुछ वर्षों में शायद जानता है यह छोटा होगा)। हालांकि, अभी भी बलपूर्वक बल के लिए यह कठिन है क्योंकि आपको फाइल में एक (ब्लॉब) चेकसम के (पेड़) चेकसम के (प्रतिबद्ध) चेकसम लिखना है।
स्रोत
2017-09-29 00:37:42
यहां आपका वास्तविक अंत लक्ष्य क्या है? यह ऐसा कुछ है जिसे आप वास्तव में करना चाहते हैं, और मिडटीबी कहते हैं, यह अनिवार्य रूप से असंभव है। – Cascabel
असल में मेरे पास एक वेब एप्लिकेशन है और मैं उस एप्लिकेशन के एक स्थापित संस्करण को उस सटीक प्रतिबद्धता के साथ जोड़ना चाहता हूं जो संस्करण से जुड़ा हुआ है। मेरी प्रारंभिक विचारधारा प्रतिबद्ध हैश के साथ about.html फ़ाइल को अपडेट करना था। लेकिन गिट के ऑब्जेक्ट मॉडल का अध्ययन करने के बाद, मुझे एहसास हुआ कि यह असंभव है =/ –
यह एक बहुत ही व्यावहारिक समस्या है। मैं भी इसमें भाग गया! –