2011-04-12 13 views
13

मेरी एक स्क्रिप्ट के साथ एक भंडार से एक उप-इतिहास के इतिहास को दोबारा लिखने के बाद, मैंने इसकी तुलना उसी 0% पर git filter-branch ... की तुलना में की थी। मैं देखता हूं कि प्रारंभिक कामों में अलग-अलग sha1 होते हैं, हालांकि मुझे उम्मीद है कि वे समान हों (इसका परिणाम यह है कि दोनों इतिहासों से सभी अलग-अलग sha1 होते हैं)।जाहिर है कि अलग-अलग sha1 देता है, क्यों?

दोनों कामों पर git show --format=raw <commit-sha1> करना बिल्कुल वही आउटपुट देता है (पहली पंक्ति को छोड़कर, जो commit <commit-sha1> है, परिणाम प्रस्तुत करना)।

ऑब्जेक्ट फ़ाइलें पूरी तरह से अलग हैं, लेकिन जैसे ही वे बाइनरी हैं, मैं मूल कारण को नहीं समझ सकता।

मानते हैं कि सभी गिट संस्करण एक दूसरे के साथ संगत हैं, 2 अलग-अलग sha1 के बारे में क्या समझा सकता है?

इस तरह के पेड़ के SHA1 के रूप में एक करने के लिए

+0

शायद एक बदलती ईमेल, एक बदलती प्रतिबद्ध तिथि, या इसी तरह की मेटा-सूचना? –

उत्तर

14

Git के आदानों धन्यवाद हैश प्रतिबद्ध मेटाडाटा में शामिल हैं, माता-पिता की SHA1, commiter का नाम, ईमेल और तारीख के लिए प्रतिबद्ध है, और लेखक का नाम, ईमेल और प्रतिबद्ध तारीख । तो जब आप इतिहास को फिर से लिखते हैं, तो कमिश्नर तिथि और पेड़ प्रतिबद्ध करता है (चूंकि आपने filter-branch किया था) शायद बदल गया है, इसलिए आपके प्रतिबद्धता के SHA1 में अंतर है।

किसी प्रतिबद्धता के प्रारूप के बारे में अधिक जानकारी के लिए, आप git cat-file commit <sha> का उपयोग कर सकते हैं या Git Objects section of the Git Book देख सकते हैं।

+1

सभी पेड़, माता-पिता, ईमेल, तिथियां, लेखक और कमिटर के नामों की सूचना मिली थी। इस बीच, 'गिट कैट-फाइल' का उपयोग करने के आपके सुझाव ने लॉग इन टिप्पणियों में अतिरिक्त '\ n' देखकर मदद की, जबकि मुझे 'गिट शो' के साथ कोई अंतर नहीं दिख रहा है। मैं यह देख रहा हूँ। – bm842

+1

मैंने देखा है कि कुछ उपकरण कभी-कभी प्रतिबद्ध संदेश के अंत में अतिरिक्त खाली रेखा जोड़ते हैं जब कोई नहीं होता है (ताकि यह खाली रेखा के साथ समाप्त हो)। शायद यह आपके मामले में क्या होता है? –

+0

मैं पुष्टि करता हूं कि मेरी स्क्रिप्ट गलत तरीके से एक नई लाइन जोड़ती है। मैंने तय किया है और अब एक ही sha1 है। धन्यवाद सिल्वेन। – bm842

संबंधित मुद्दे