2013-03-05 6 views
14

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

मुझे a similar question मिला, लेकिन मुझे यकीन नहीं है कि रीजिक्स-प्रकार की खोज से अस्थायी फ़ाइल कैसे बनाएं।

+1

कुछ उदाहरण शायद आप जो हासिल करने की कोशिश कर रहे हैं उसे स्पष्ट करने में एक लंबा सफर तय करेंगे। – rvalvik

उत्तर

-1

xargs आप क्या देख रहे हैं। इस प्रयास करें:

ऊपर पाइप | को
grep -irl 'regex_term_to_find' * | xargs -I FILE git add FILE 

सभी फाइलों * खोज के लिए अपना मानक ग्रेप आदेश है। विकल्प हैं:

  • i - केस संवेदी
  • r - के नाम सूची फ़ाइलों के नाम केवल

बयान FILE की xargs भाग में है - निर्देशिका के माध्यम से पुनरावर्ती

  • l grep कमांड द्वारा पारित प्रत्येक तर्क/मिलान के लिए उपयोग करने के लिए चर। फिर जहां वांछित चर का उपयोग कर वांछित आदेश दर्ज करें।

  • +5

    धन्यवाद, लेकिन मैं पूरी फाइलों में नहीं, सिर्फ फाइल का हिस्सा जोड़ना चाहता हूं। – FazJaxton

    +0

    @FazJaxton, इसके लिए आपको पैच के रूप में जोड़ने की आवश्यकता होगी। 'Git add' के बाद '-p' पैरामीटर का उपयोग करें, हालांकि मुझे यकीन नहीं है कि यह xargs के भीतर कैसे काम करेगा क्योंकि पैच प्रक्रिया आपके द्वारा की जाती है (यानी चयन करना चाहिए कि क्या जोड़ा जाना चाहिए और क्या नहीं होना चाहिए)। – RDL

    13

    patchutils में कमांड grepdiff है जिसका उपयोग इसे प्राप्त करने के लिए किया जा सकता है।

    # check that the regex search correctly matches the changes you want. 
    git diff -U0 | grepdiff 'regex search' --output-matching=hunk 
    
    # then apply the changes to the index 
    git diff -U0 | grepdiff 'regex search' --output-matching=hunk | git apply --cached --unidiff-zero 
    

    मैं diff पर -U0 का उपयोग असंबंधित परिवर्तन प्राप्त करने से बचने के लिए। आप अपनी स्थिति को सुइट करने के लिए इस मान को समायोजित करना चाहेंगे।

    +0

    यह मेरे लिए बहुत अच्छा काम करता है, लेकिन एक नोट के रूप में, 'हंक' वास्तव में पर्याप्त ग्रैन्युलरिटी प्रदान नहीं करता है अगर आपने पड़ोसी लाइनों को संशोधित किया है जो रेगेक्स से मेल नहीं खाते हैं। – arcyqwerty

    +0

    मुझे लगता है कि दूसरी पंक्ति को चलाने के लिए एक अच्छा तरीका है और फिर परिणामों की जांच करें। चरणबद्ध सामग्री के लिए 'गिट स्थिति -v' और' git diff' उन सभी चीजों को देखने के लिए जो चरणबद्ध नहीं हुए थे। फिर अगर सब सही दिखता है तो प्रतिबद्ध करें। – Gerry

    0

    अधिक सरल, आप git add -p का उपयोग कर सकते हैं और पैच के लिए अपने diff के माध्यम से खोजने के लिए / विकल्प का उपयोग कर सकते हैं। यह पूरी तरह से स्वचालित नहीं है, लेकिन मेरे द्वारा प्राप्त अन्य विकल्पों की तुलना में यह आसान है।

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