2012-11-25 21 views
7

में ईमेल पता बदलें मैं थोड़ी देर के लिए एक गिट भंडार पर काम कर रहा हूं और कुछ काम करता हूं। मैं अपने php फाइलों में प्रलेखन ब्लॉकों का उपयोग किया गया है, मेरे निजी ईमेल पते सहित, इस तरह:गिट इतिहास

/** 
* Bla bla bla. 
* 
* @author:  Nic <[email protected]> 
*/ 

अब मैं एक नया ईमेल पता बनाया है और प्रलेखन ब्लॉक अद्यतन, नए के साथ पुराने पते की जगह है। लेकिन यह परिवर्तन केवल उस स्थान पर लागू होता है जहां मैंने दस्तावेज़ बदल दिया था।

मैं गिट के इतिहास से पुराने ईमेल पते को पूरी तरह से कैसे हटा सकता हूं और नए पते के साथ सभी उदाहरणों को प्रतिस्थापित कर सकता हूं?

मैंने this blog post का उपयोग करके गिट फ़िल्टर-शाखा का उपयोग करने की कोशिश की है लेकिन सफलता के बिना।

git filter-branch --tree-filter 'git ls-files -z "*.php" |xargs -0 perl -p -i -e "s#[email protected]#[email protected]#g"' -- --all 
Usage: git core\git-filter-branch [--env-filter <command>] [--tree-filter <command>] 
     [--index-filter <command>] [--parent-filter <command>] 
     [--msg-filter <command>] [--commit-filter <command>] 
     [--tag-name-filter <command>] [--subdirectory-filter <directory>] 
     [--original <namespace>] [-d <directory>] [-f | --force] 
     [<rev-list options>...] 

यह हो सकता है कि ईमेल पतों की विशेष वर्ण (@ और।) नियमित अभिव्यक्ति अप खिलवाड़ कर रहे हैं: मैं निम्नलिखित परिणाम प्राप्त? इसके अलावा मुझे नहीं पता कि क्या गलत हो रहा है, किसी भी मदद की सराहना की जाती है!

उत्तर

3

एक अन्य विकल्प फिल्टर शाखा इस तरह से कोशिश कर रहा है:

git filter-branch --commit-filter 'if [ "$GIT_AUTHOR_NAME" = "Nick NLD" ]; 
    then export [email protected]; 
    fi; git commit-tree "[email protected]"' 
+4

यह केवल काम के लेखक को बदल देगा, सवाल फ़ाइल सामग्री में ईमेल पता बदलने का एक तरीका ढूंढ रहा है। – qqx

+0

मुझे पहले से ही एक मिला है लेकिन क्यूएक्सएक्स ने कहा है कि यह प्रतिबद्धता के मेल पते को बदलता है, न कि फ़ाइल के अंदर दस्तावेज़ ब्लॉक। –

+2

यह "==" के बजाय "=" के साथ मेरे लिए ठीक काम करता है। –

4

मैं क्यों एक उपयोग संदेश मिलता है पता नहीं है। & कॉपी करें अपने आदेश को चिपकाने के लिए फ़िल्टर शाखा को मेरे लिए चलाने के लिए मिला। लेकिन, यह वास्तव में किसी भी फाइल को संशोधित नहीं किया था। यह वास्तव में ईमेल पते में @ वर्णों की वजह से था, जिसके कारण पेर्ल एक सूची चर के रूप में @email का इलाज करने का कारण बनता है और उसमें (गैर-मौजूदा) सामग्री को प्रतिस्थापित करता है। तो नियमित अभिव्यक्ति old-email.com की तलाश में थी।

जिसे \@ का उपयोग करके @ पर perl कमांड में संकेतों का उपयोग करके तय किया जा सकता है। पुराने ईमेल पते में . एक नियमित अभिव्यक्ति के लिए एक विशेष चरित्र है, लेकिन यह किसी और चीज़ के साथ स्वयं मेल खाता है। इस मामले में शेष पैटर्न पर्याप्त सख्त होने की संभावना है कि इससे कोई फर्क नहीं पड़ता है, इसलिए शायद आपको इससे बचने की ज़रूरत नहीं है।

+0

धन्यवाद। क्या मुझे शायद फ़िल्टर-शाखा के लिए काम करने के लिए कुछ कॉन्फ़िगर करना चाहिए? मैं एक गिट-नोब की तरह हूं और पहले फ़िल्टर-शाखा का उपयोग नहीं करता था। –

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