अनावश्यक svn: mergeinfo गुण निकालें


136

जब मैं अपनी रिपॉजिटरी में सामान मर्ज करता हूं तो सबवर्सन उन svn:mergeinfoसंपत्तियों को बहुत सारी फाइलों में जोड़ना / बदलना चाहता है जो उन चीजों से पूरी तरह से असंबंधित हैं जिन्हें मैं मर्ज करना चाहता हूं।

स्टैक ओवरफ्लो पर यहां पहले इस व्यवहार के बारे में प्रश्न पूछे गए हैं:

ऊपर बताए गए विषयों से मैं जो समझता हूं, वह ऐसा लगता है कि मेरी रिपॉजिटरी में बहुत सारी फाइलें svn:mergeinfoउन पर स्पष्ट हैं, जब उन्हें नहीं करना चाहिए। सलाह राशि को कम करने और केवल उन संपत्तियों को प्रासंगिक फाइलों / फ़ोल्डरों पर लगाने की है।

तो अब मेरा सवाल है: मैं उन अनावश्यक संपत्तियों को आसानी से कैसे हटा सकता हूं? मैं TortoiseSVN का उपयोग कर रहा हूं, लेकिन मैं सैकड़ों फाइलों को मैन्युअल रूप से जांचने / ठीक करने के लिए अनिच्छुक हूं। क्या उन अनावश्यक svn:mergeinfoगुणों को हटाने का एक आसान तरीका है ?

PS मैं C ++ SVN API कोड नहीं खोज रहा हूँ ।

जवाबों:


142

यहां सभी उप-वृक्ष svn: mergeinfo गुण को हटाने का एक और तरीका है, लेकिन रूट फ़ोल्डर में नहीं (यह ठीक से काम करने के लिए शाखाओं में बंटने के लिए आवश्यक है)।

परियोजना की जड़ से:

svn propdel svn:mergeinfo -R
svn revert .
svn ci -m "Removed mergeinfo"

57
या, बस रूट dir पर यह मत करो "svn propdel -R svn: mergeinfo//*"
जेरेमी वेबर

3
"svn propdel -R svn: mergeinfo ./* ./.I.Live.com.cs*" यदि आपके पास "डॉट" / * ix छिपी हुई फाइलें हैं, तो शायद प्रति प्रश्न Windows उपयोगकर्ता के लिए कोई समस्या नहीं है।
पीटर

3
दबाने से आउटपुट में तेजी आती है: "svn propdel svn: mergeinfo -R> nul" (या> / dev / null Linux का उपयोग करके)
bebbo

2
@JeremyWeir "बस रूट डायर पर मत करो" से आपका क्या मतलब है? तब से कहां है? उस टिप्पणी पर आपके पास बहुत सारे upvotes हैं, लेकिन मैं इसका विकल्प नहीं देख रहा हूं।
टीटी।

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

15

यहाँ सबट्री svn: mergeinfo गुण हटाने का एक तरीका है। इसे अपने भंडार की जड़ के अंदर चलाएं:

svn propget svn:mergeinfo --depth=infinity 
    | grep -v "^/"
    | grep -v "^\."   
    | cut -d- -f1 
    | xargs svn propdel svn:mergeinfo

आसान प्रतिलिपि / चिपकाने के लिए सभी एक पंक्ति में:

svn propget svn:mergeinfo --depth=infinity | grep -v "^/" | grep -v "^\." | cut -d- -f1 | xargs svn propdel svn:mergeinfo

पूर्वावलोकन करने के लिए कि आप इसे चलाने से पहले किन फ़ाइलों को प्रभावी करेंगे, अंतिम "प्रोपेलल" को "प्रोपगेट" में बदल दें या अंतिम xargs पाइप को पूरी तरह से हटा दें।


2
फाइलों में हाइफ़न के साथ काम करता है: svn propget -R svn: mergeinfo | grep -v "^ /" | grep -v "^ \" | कट "-d" -f1 | xargs svn propdel svn: mergeinfo
गिलहरी

12

जैसा कि इस सूत्र में बताया गया है :

  • अधिकांश खाली मर्जिनफ़ो ("रिक्त") काम की प्रतिलिपि के लिए काम करने वाली प्रतियों / चालों के कारण हो सकता है जहां स्रोत आइटम में कोई स्पष्ट मर्जिनफ़ो नहीं है। प्रोपेल का उपयोग तब तक समाधान हो सकता है जब तक कि आप 1.6 एसवीएन का उपयोग नहीं कर रहे हैं: 1.5.5 के बाद से ये डब्ल्यूसी-टू-डब्ल्यूसी प्रतियां अब गंतव्य पर खाली मर्जिनफो नहीं बना सकती हैं
  • पहले के svn मूव (नाम बदलना) का पुनर्गठन ऑपरेशन भी रूट निर्देशिका में छोड़ने के बजाय, मर्जिनफो को प्रचारित कर सकता है।
  • एक संभावित मेमोरी इश्यू है, जिसे केस 3393 द्वारा ट्रैक किया गया है जो आगामी 1.6.2 संस्करण में तय किया जाएगा और 1.5 में वापस पोर्ट किया जाएगा।

6

जैसा कि मैं अंधे svn:merge-infoसंपत्ति विलोपन के साथ आश्वस्त नहीं हूं, मैंने एक काम की प्रतिलिपि पर वर्तमान स्थिति का विश्लेषण करने और गैर-रूट मर्ज-जानकारी गुणों से जितना संभव हो उतना मर्ज संशोधन को हटाने के लिए एक उपकरण लागू किया है। अतिरिक्त मानव जांच और नियंत्रणों के बाद, कार्य की प्रतिलिपि में परिवर्तन किए जा सकते हैं।

यहाँ यह है: svn-clean-mergeinfo

इसे सुधारने के लिए इसके उपयोग के बारे में किसी भी समस्या की रिपोर्ट करने में संकोच न करें।

तोड़फोड़ 1.10 उस कार्य के लिए समर्पित एक नया उपकरण पेश करता है: svn-mergeinfo-normalizer


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

मैं मानता हूं कि यह सही नहीं है ... यही कारण है कि "मानव जांच और नियंत्रण" अभी भी आवश्यक हैं। आपके मामले में, यदि आपने मर्ज-इंफ़ॉर्मेशन गुणों में गैर-प्रासंगिक संशोधनों की पहचान की है, तो आप इन संशोधनों या पूरे svn: मर्ज-जानकारी की संपत्ति को कमिट करने से पहले हटा सकते हैं। कृपया सुधार के लिए पूछने के लिए गीथूब का उपयोग करें।
यव्स मार्टिन

4

मुझे पता है कि यह एक समय हो गया है, लेकिन मैं एक समान समस्या में भाग गया। मैं TortoiseSVN 1.6.7 का उपयोग कर रहा हूं। यह सिर्फ इतना हुआ कि संपत्ति मेरी कामकाजी प्रति के मूल में थी। जब मैंने संपत्तियों को रूट पर देखा और निकालें पर क्लिक किया svn: mergeinfo, इसने मुझसे पूछा कि क्या मैं इसे प्रमुखता से निकालना चाहता हूं। यह मेरे सभी svn: mergeinfo cockups से छुटकारा दिलाता है।


मैं उसी स्थिति में था। मेरे लिए काम किया। धन्यवाद!
andrewd18

2

यदि आप सुनिश्चित हैं कि आप मर्जिनॉफ गुणों को बड़े पैमाने पर हटाना चाहते हैं, तो आप निम्नलिखित BASH स्क्रिप्ट का उपयोग कर सकते हैं।

FILES=`svn status |grep "^ M      " |sed s/" M      "// |tr '\n', ' '`
svn revert $FILES

इसे परिवर्तित फ़ाइलों की एक सूची मिलती है, इसे केवल मर्जिनफॉ में फ़िल्टर करता है केवल परिवर्तन करता है, सब कुछ स्ट्रिप्स करता है लेकिन वास्तविक फ़ाइल पथ, एक-प्रति-पंक्ति पथों को एक स्थान सीमांकित सूची में कनवर्ट करता है, और कॉल उस सूची पर वापस आ जाते हैं।


2
थैंक्स, लेकिन जैसा कि आप मुझसे जानते हैं कि आप TortoiseSVN का उल्लेख कर रहे हैं मैं एक Windows उपयोगकर्ता हूं और बैश शेल का उपयोग नहीं करता हूं :-)
लियोनज़ैंडमैन

डॉस में एक ही चीज संभव होनी चाहिए, यद्यपि संभवतः यह उतना कठिन नहीं है।
चेस सीबेरट

1
क्या यह केवल वर्तमान कार्यशील निर्देशिका में संशोधित मर्जिनफ़ो के साथ फ़ाइलों को वापस नहीं करता है? यदि ऐसा है, तो यह समस्या का समाधान नहीं करता है: मौजूदा स्पष्ट मर्जिनफो। उसके लिए, आपको प्रचार करना होगा।
डोमिनिक शेहर्लिनक

2
यह काफी छोटी गाड़ी है - इसके नाम पर व्हॉट्सएप के साथ एक फ़ाइल नाम है? इसके नाम में ग्लोब कैरेक्टर के साथ? किसी भी मामले में बुरी खबर। Svn स्थिति से आउटपुट पार्स करने के लिए अनुमोदित / समर्थित तरीका --xmlध्वज और एक XML पार्सर का उपयोग कर रहा है ; संस्करणों के बीच कुछ और बदल सकता है, क्योंकि पाठ आउटपुट प्रारूप पर फॉरवर्ड संगतता की गारंटी नहीं है।
चार्ल्स डफी

2

मर्जिनॉफ गुण को केवल नेत्रहीन रूप से हटाने के बजाय, "लापता" मर्ज को पूरा करना भी संभव है।

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

आम तौर पर यह मर्ज केवल मर्जिनफॉय गुण को बदलने के लिए समाप्त होना चाहिए, न कि किसी वास्तविक फाइल पर। (यदि यह बदलती हुई फ़ाइलों को समाप्त करता है, तो पिछले मर्जों में से एक केवल एक आंशिक मर्ज रहा होगा, जो आपको वैसे भी समस्या पैदा कर रहा होगा।)

ऐसा करने से आपके लिए मर्जिनो संपत्ति को समाप्त कर देना चाहिए, एक बार जब आप उन दोनों को प्राप्त कर लेते हैं तो वे बिल्कुल मेल खाते हैं। आपको रिवर्स करने की भी आवश्यकता हो सकती है: किसी भी मर्ज के संशोधन को केवल बाल फ़ोल्डर में मौजूद रूट में मर्ज करें (फिर से, आप केवल पूरी सूची पेस्ट कर सकते हैं और एसवीएन को आपके लिए अंतर ढूंढने दें)।


1

निर्देशिका संरचना में परिवर्तन करने के लिए, यह होगा (गैर-डॉस 'केवल' खोजें):

find . -path "*/.svn" -prune -or -exec svn propdel svn:mergeinfo '{}' \;

1.5 सर्वर से जुड़ा 1.6.12 क्लाइंट चलाना, मुझे एक समान समस्या है; वहाँ है परियोजना जो अपनी ही SVN की जरूरत में एक उपनिर्देशिका: mergeinfo, लेकिन ( "SVN: उपेक्षा *" के साथ ./var नीचे 5 निर्देशिका सहित) 121 ऐसे प्रविष्टियों होने पर कुछ हद तक अनुचित लगता है। इस प्रकार, यह एक अच्छा होगा (जैसे पायथन) स्क्रिप्ट जो स्पष्ट रूप से शानदार विलय जानकारी को हटाने और अन्य अंतरों के बारे में बताने में सक्षम है ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.