2013-05-07 10 views
7

मैं अपने सॉफ्टवेयर के संशोधन 78 9 में किए गए परिवर्तनों को दिखाने के लिए svn diff -c 789 का उपयोग कर रहा हूं, लेकिन यह बहुत सारी फाइलें दिखा रहा है जिनकी मुझे परवाह नहीं है, विशेष रूप से परीक्षण फाइलों में। मैं diff से कुछ फ़ाइलों को कैसे बहिष्कृत कर सकता हूं, उदाहरण के लिए सभी फ़ाइलें जो पैटर्न *Test.java से मेल खाते हैं?मैं कुछ फ़ाइलों को svn diff से कैसे बाहर निकालूं?

मैं विंडोज पर सिग्विन का उपयोग कर रहा हूं, यदि यह महत्वपूर्ण है।

+0

यह 'SVN diff' से किसी भी फाइल को बाहर करने के लिए संभव नहीं है।आप जो उपकरण कर सकते हैं वह उस उपकरण का उपयोग करना है जो उन फ़ाइलों के परिवर्तनों को फ़िल्टर (भी बहिष्कृत) करने में सक्षम बनाता है जिनके बारे में आप परवाह नहीं करते हैं या एक स्क्रिप्ट लिखते हैं जो 'svn diff' के आउटपुट को पार्स करने वाले फ़ाइलों से किए गए परिवर्तनों को हटा देगा) निकालना। यदि आप इस तरह की लिपि में रुचि रखते हैं तो कृपया अपने पर्यावरण - ऑपरेटिंग सिस्टम और खोल के बारे में अधिक जानकारी प्रदान करें। –

+0

@Adam मैं विंडोज 7 पर सिगविन का उपयोग कर रहा हूं। – MikeFHay

उत्तर

5

svn diff आउटपुट से विशिष्ट फ़ाइलों को बाहर करने की अनुमति नहीं देता है, नीचे एक BASH स्क्रिप्ट है जिसका उपयोग इसे प्राप्त करने के लिए किया जा सकता है। (जैसे test/*)

एक svn diff उत्पादन

  • फ़ाइलों के pattern बाहर रखा जाना साथ

    • file और बदलाव के बिना file की सामग्री के प्रिंट:

      यह दो तर्क लेता है pattern से मेल खाने वाली फाइलों से। filterdiff:

      #!/bin/bash 
      
      test $# -ne 2 && echo "Usage: $0 svn_diff_file exclude_pattern" && exit 1 
      
      ignore=0 
      while IFS= read -r line; do 
          echo $line | grep -q -e "^Index: " && ignore=0 
          echo $line | grep -e "^Index: " | grep -q -e "^Index: $2" && ignore=1 
          test $ignore -eq 0 && echo "$line" 
      done < $1 
      

      अद्यतन

      मैं सिर्फ एक उपकरण है कि इस काम करता है भर में आया था। यह उपयोग बहुत ऊपर स्क्रिप्ट के समान है है:

      filterdiff svn_diff_file -x exclude_pattern

  • +1

    यह अच्छा है लेकिन विशाल diff फ़ाइलों के मामले में यह सब कुछ के अंतर को फ़िल्टर करने के बजाय वांछित फ़ाइलों पर केवल 'svn diff' को कॉल करना बेहतर हो सकता है। यदि आपके पास ऐसे मुद्दे हैं तो नीचे विक्टर का जवाब देखें। – Martin

    3

    वैसे, याद रखें कि SVN diff आदेश यूनिक्स में मॉड्यूलर दर्शन जहां प्रत्येक आदेश एक मानक इनपुट और ouput है निम्नलिखित दूसरों आदेशों के रूप में काम करता है। आप उन फ़ाइलों को सूचीबद्ध करने के लिए अपनी खुद की कस्टमाइज़ स्क्रिप्ट जेनरेट कर सकते हैं, जिन्हें आप पाइप के उपयोग के माध्यम से svn diff कमांड में उस स्क्रिप्ट के आउटपुट को रीडायरेक्ट करना चाहते हैं और फिर वांछित फ़ाइल में अपने इच्छित आउटपुट को रीडायरेक्ट करना चाहते हैं। बस और अधिक स्पष्ट होना: इस उदाहरण का अनुसरण

    svn diff `cat change_list.txt` > patch.diff 
    
    change_list.txt में

    फ़ाइलें आप diff अंतरिक्ष से अलग कर दिया में शामिल करना चाहते हैं। उदाहरण के लिए, फ़ाइल की सामग्री इस हो सकता है:

    "डोमेन/मॉडल/entity.java"

    "web_app/नियंत्रक/controller.java"

    तो इस दृष्टिकोण निम्नलिखित , आपकी समस्या का एकमात्र भिन्नता एक स्क्रिप्ट को लागू करने के लिए कम हो गया है जैसे कि एडम ने उदारतापूर्वक ऊपर लिखा था।

    उम्मीद है कि यह मदद करता है!

    विक।

    1

    यह मैं क्या किया है:

    FILES=$(svn status some_dir|grep ^M|cut -b2-|grep -v dir_to_remove) 
    test -n "$FILES" && svn diff "$FILES" 
    
    संबंधित मुद्दे