2009-04-20 17 views
128

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

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

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

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

पीएस मैं सी ++ एसवीएन एपीआई कोड की तलाश में हूं।

उत्तर

12

this thread में उल्लेख किया है:

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

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

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

यह बदली हुई फ़ाइलों की एक सूची हो जाता है, फिल्टर यह सिर्फ केवल परिवर्तन mergeinfo, सब कुछ है लेकिन वास्तविक फ़ाइल पथ स्ट्रिप्स एक अंतरिक्ष सीमांकित सूची में एक-प्रति-लाइन पथ बदल देता है, और कॉल पर वापस लौटने वह सूची

+2

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

+0

डीओएस में भी वही बात संभव होनी चाहिए, यद्यपि संभवतया टर्से नहीं है। –

+1

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

13

यहां सभी subtree 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 

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

+2

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

2

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

+0

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

131

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

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

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

एक 1.6 चल रहा है:

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

या, बस इसे रूट डीआईआर पर नहीं करें "svn propdel -R svn: mergeinfo ./*" – JeremyWeir

+2

"svn propdel -R svn: mergeinfo ./* ./.[^.]*" अगर आपके पास भी है "डॉट"/* ix छिपी हुई फाइलें, शायद प्रति प्रश्न विंडोज उपयोगकर्ता के लिए कोई समस्या नहीं है। – Peter

+3

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

1

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

4

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

संदेश यह है: svn-clean-mergeinfo

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

+1

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

+0

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

2

बस आँख बंद करके mergeinfo गुण को हटाने के बजाय, यह भी "लापता" मर्ज के पूरा करने के लिए संभव है:

सबवर्सन 1.10 उस कार्य को करने के लिए समर्पित एक नया उपकरण प्रस्तुत करता है।

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

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

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

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