2009-03-26 13 views
26

मुझे गिट में हमारे सीवीएस भंडार के दो अलग-अलग निर्यात मिल गए हैं। वे किसी बिंदु पर अलग हो जाते हैं, और मैं कुछ जांच कर रहा हूं क्यों। विकास रेखा कई सालों से और हजारों कामों से अधिक हो जाती है।मैं दो गिट भंडारों की तुलना कैसे करूं?

विकास लाइन की शुरुआत में, प्रत्येक प्रतिबद्धता के लिए SHA1 आईडी समान हैं, मुझे बताते हुए कि git-cvsimport सीवीएसपीएस और आयात के परिणामों को पढ़ने पर यह क्या कर रहा है इसके बारे में बहुत संगत है।

लेकिन पहले प्रतिबद्धता और कल के बीच कभी-कभी, SHA1 आईडी अलग हो जाते हैं। मैं यह जानना चाहता हूं कि यह प्रत्येक भंडार से प्रतिबद्ध आईडी की सूची की तुलना करके और क्या गुम है यह देखने के लिए है। क्या ऐसा करने के लिए कोई अच्छा उपकरण या तकनीक है?

उत्तर

16

क्यों न सिर्फ प्रत्येक रिपो की गिट लॉग अपनी फ़ाइल में लॉग और तुलना करें? फ़ाइल के निचले भाग के निकटतम अंतर यह है कि उन्होंने डाइविंग शुरू किया ...

+0

में फ़ाइलों की तुलना करने में सक्षम था, वास्तव में यह है कि मैं कल क्या कर रहा था, हालांकि आज मैं अन्य उत्तरों से कुछ सुझावों के साथ थोड़ा और उन्नत हो रहा हूं। – skiphoppy

+3

सींग जहां दो रिपोजिटरी डाइविंग शुरू हुईं तो मुझे उस मतभेद के बाद बनाए गए मतभेदों को बताने का एक लंबा रास्ता है। – masukomi

+0

क्षमा करें, लेकिन यह सवाल नहीं था। सवाल यह है कि आप दो रिपो की तुलना कैसे करते हैं। उत्तर नीचे है। – awm

6

स्पष्ट रूप से एक भंडार क्लोन करना होगा, अन्य भंडार की मुख्य शाखा की नोक को क्लोन में लाएं और सामान्य पूर्वजों को खोजने के लिए दो युक्तियों पर गिट मर्ज-बेस का उपयोग करें।

30

चूंकि दो गिट रिपॉजिटरीज एक ही शुरू हो जाते हैं, तो आप दोनों एक ही कामकाजी भंडार में खींच सकते हैं।

$ git remote add cvsimport-a git://.../cvsimport-a.git 
$ git remote add cvsimport-b git://.../cvsimport-b.git 
$ git remote update 
$ git log cvsimport-a/master..cvsimport-b/master # in B, not in A? 
$ git log cvsimport-b/master..cvsimport-a/master # in A, not in B? 
+0

आपको शायद उन आदेशों में cvsimport-a/master और cvsimport-b/master की आवश्यकता होगी।इसके अलावा, आप xargs गिट fetch करने के लिए पाइपिंग के बजाय "गिट रिमोट अपडेट" कर सकते हैं। –

+0

मैं मूल रूप से 'गिट रिमोट fetch cvsimport-a लिखने जा रहा था; गिट रिमोट fetch cvsimport-b' (किसी अन्य रिमोट को अपडेट नहीं किया जा रहा है), लेकिन फिर मैंने अपना दिमाग बदल दिया ... किया। यदि आप छोड़ते हैं/मास्टर करते हैं तो गिट शिकायत करता है लेकिन यह काम करता है। मैं इसे स्पष्टता के लिए बदल दूंगा। – ephemient

12

अपने रेपोस से एक में, निम्न करें:

$ git remote add other-repo git://.../other-repo.git 
$ git remote update 
$ git log other-repo/master...master 
    # or maybe: 
$ gitk master... other-repo/master 

यह आपको दो रेपोस के बीच सममित अंतर देता है; यह आपको उन सभी कामों को दिखाता है जो एक रेपो में हैं, लेकिन दूसरे नहीं।

0

आप दोनों खजाने एकल भंडार में, या तो नया एक, या मौजूदा में से एक, प्रतिक्रिया में के रूप में ephemient, चार्ल्स बेली और ब्रायन कैंपबेल से रख सकते हैं (लाने)। या आप गिट विकी पर Tips and Tricks पृष्ठ से चाल का उपयोग कर सकते हैं, या वहां "दो स्थानीय भंडारों की तुलना कैसे करें" प्रश्न अधिक सटीक होने के लिए उपयोग कर सकते हैं।

लेकिन "गिट रेव-लिस्ट" (या उचित विकल्प के साथ "गिट-लॉग") का उपयोग करके स्थलीय क्रम में काम करने के SHA-1 की सूची जेनरेट करना आसान हो सकता है, और वे पहले संशोधन को अलग-अलग जांच सकते हैं।

+0

टिप्स और ट्रिक्स लिंक एक "नहीं मिला" देता है, क्या यह स्थानांतरित हो गया है या यह चला गया है? – Chris

+0

गिट विकी पहले http://git.or.cz से http://git.wiki.kernel.org पर चले गए लेकिन kernel.org में ब्रेक-इन के बाद दूसरा अभी तक वापस नहीं है (और यह ज्ञात नहीं है कि यह होगा वहाँ बेकार हो, या शायद कहीं http://git-scm.com पर)। http://git.wiki.kernel.org केवल पढ़ने के लिए मोड में है, इसलिए सभी लिंक बदल गए हैं। ** टिप्स और ट्रिक्स ** (उर्फ ** गिटटिप्स **) यहां उपलब्ध है: https://git.wiki.kernel.org/articles/g/i/t/GitTips_81aa.html –

0

मुझे हाल ही में इसी तरह की आवश्यकता थी। मेरे पास एक क्लोन रिमोट प्रोजेक्ट था जिसे मुझे वर्तमान प्रतिलिपि कोड बेस के साथ तुलना करने की आवश्यकता थी। गिट लॉग प्रासंगिक नहीं थे, क्योंकि कामों में कुछ भी सामान्य नहीं था, और मुझे यकीन नहीं था कि वे उसी कोड बेस से ब्रांच किए गए हैं।

समस्या को हल करने के लिए, मैंने एक क्रूर बल तरीके से गिट का उपयोग किया। मैंने गिट रेपो में फ़ाइलों को कॉपी करने के लिए प्रतिलिपि बनाई, फिर सूची में फ़ाइलों के लिए git status की जांच की।

इसके अतिरिक्त, git diff <filename> का भी निरीक्षण करने के लिए उपयोग किया जा सकता है। मैं

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