2010-02-08 10 views
11

मेरे पास एक परियोजना है जिसमें गिट के साथ संस्करण है जिसे मैं ओपन सोर्स बनाना चाहता हूं, लेकिन इसमें कुछ निजी जानकारी है जो पर्यावरण के लिए विशिष्ट है जिसका मूल रूप से उपयोग किया जाता था। मैं एक कॉन्फ़िगरेशन फ़ाइल से लोड करने के लिए प्रश्न में जानकारी को बदलने जा रहा हूं जो भंडार में शामिल नहीं है। मुझे एहसास है कि मुझे इसे पहले स्थान पर करना चाहिए था, लेकिन चूंकि निजी जानकारी अभी भी पिछले कामों में मौजूद है, इसलिए मैं इसे अपने इतिहास से कैसे हटा सकता हूं? क्या मुझे नवीनतम प्रतिबद्धता के आधार पर एक नया भंडार शुरू करना है और मेरा पूरा इतिहास खोना है या निजी जानकारी के किसी भी रिकॉर्ड को हटाते समय वर्तमान भंडार को बचाने का कोई तरीका है?पुरानी गिट से निजी जानकारी को हटाने

संपादित करें: स्पष्टीकरण के लिए, मैं उन निजी फ़ाइलों को पूरी तरह से हटाना नहीं चाहता हूं जिनमें यह निजी जानकारी है, क्योंकि उनका अभी भी उपयोग किया जाता है। इसके बजाय, मैं उनके भीतर कुछ तारों की घटना को हटाना/खाली करना/बदलना चाहता हूं।

उत्तर

2

मैंने थोड़ी देर पहले इसके लिए एक स्क्रिप्ट लिखी थी। आप इसे यहां पा सकते हैं: http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/

स्क्रिप्ट git-filter-branch उपकरण पर गिट के साथ आता है। यदि आप उत्सुक हैं, तो आप गिट रेपो here से फ़ाइलों को हटाने के बारे में अधिक पढ़ सकते हैं, लेकिन उपरोक्त लिंक से स्क्रिप्ट का उपयोग करना आसान होना चाहिए और आपको वास्तव में उस निजी जानकारी को हटाने की आवश्यकता है।

+0

यह एक महान उपकरण की तरह दिखता है लेकिन मुझे यकीन नहीं है कि यह मेरे मामले में काम करेगा। मुझे अपने प्रश्न में और अधिक स्पष्ट होना चाहिए था, लेकिन मैं जो कुछ हटाना चाहता हूं वह कुछ तारों की घटना है - मैं पूरी फाइलों को पूरी तरह से हटाना नहीं चाहता क्योंकि फाइलें अभी भी उपयोग की जाती हैं। –

+0

ओह, मैं देखता हूं। यह थोड़ा सा ट्रिकियर है। यदि आपने उन निजी तारों में प्रवेश किया है जिनमें आप कुछ भी नहीं रखना चाहते हैं, तो आप केवल उन चीजों को हटाने के लिए गिट-फ़िल्टर-शाखा का उपयोग कर सकते हैं (फ़ाइलों को हटाए बिना)। मेरी स्क्रिप्ट आपके लिए ऐसा नहीं कर सकती है, लेकिन यदि आप गिट-फ़िल्टर-शाखा के लिए मैन पेज को देखते हैं तो मुझे लगता है कि आप देखेंगे कि आप अलग-अलग कामों को दूर करने के लिए इसका उपयोग कैसे कर सकते हैं। –

+0

इसके अलावा, आप अपनी फ़ाइलों पर एक कस्टम फ़िल्टर (स्क्रिप्ट) लागू करने के लिए गिट-फ़िल्टर-इतिहास का उपयोग करने में सक्षम होना चाहिए। ऐसा लगता है कि यह फ़ाइल को हटाने या प्रतिबद्ध करने से थोड़ा कठिन हो सकता है, लेकिन यह वही करना चाहिए जो आप चाहते हैं (और अपने भंडार को पुनरारंभ करने से बेहतर लगता है और जब आप इसे जनता के लिए रिलीज़ करते हैं तो अपना इतिहास खो देते हैं)। –

4

मैं BFG Repo-Cleaner का उपयोग करने की सिफारिश करता हूं, git-filter-branch के लिए एक सरल, तेज़ विकल्प, विशेष रूप से गिट रेपो से निजी डेटा हटाने के लिए डिज़ाइन किया गया है।

usage instructions और अधिक विस्तार में चरणों के बारे में है, लेकिन कोर बिट बस है: BFG's jar (ऊपर की जरूरत जावा 6 या) डाउनलोड करने और इस कमांड चलाएँ:

$ java -jar bfg.jar --replace-text replacements.txt my-repo.git 

replacements.txt फ़ाइल सभी प्रतिस्थापन शामिल करना चाहिए आप इस तरह से एक प्रारूप में करने के लिए, चाहते हैं (प्रति पंक्ति एक प्रविष्टि - ध्यान दें टिप्पणियां शामिल नहीं होना चाहिए): (

PASSWORD1 # Replace literal string 'PASSWORD1' with '***REMOVED***' (default) 
PASSWORD2==>examplePass   # replace with 'examplePass' instead 
PASSWORD3==>     # replace with the empty string 
regex:password=\w+==>password= # Replace, using a regex 

आपके पूरे भंडार इतिहास स्कैन किया जाएगा, और सभी गैर बाइनरी फ़ाइलें 1 एमबी के तहत आकार में) में किए गए प्रतिस्थापन होंगे: कोई मिलान करने वाली स्ट्रिंग (जो आपके नवीनतम प्रतिबद्ध में नहीं है) को प्रतिस्थापित किया जाएगा।

पूर्ण प्रकटीकरण: मैं बीएफजी रिपो-क्लीनर का लेखक हूं।

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