2010-01-12 17 views
32

क्या इसके सभी इतिहास सहित svn भंडार से फ़ाइल को हटाने का कोई तरीका है? यह मुद्दा उभरता है जब मैं रेपो में रहने वाली बड़ी बाइनरी फ़ाइल से छुटकारा पाना चाहता हूं।svn भंडार से सभी इतिहास के साथ फ़ाइल हटाएं

  1. डंप svnadmin उपयोगिता की मदद से सभी रेपो:

    मैं केवल एक दृष्टिकोण है कि इस स्थिति में मदद कर सकता है पता है।

  2. grep के साथ फ़िल्टर डंप फ़ाइल। ग्रेप फ़ाइल नाम का उपयोग और svnadmin

के साथ अन्य डंप फ़ाइल

  • आयात पिछले डंप फाइल करने के बारे में लेकिन यह भी जटिल और अविश्वसनीय है चाहिए। शायद एक और समाधान है?

  • उत्तर

    6

    लेकिन यह भी जटिल और अविश्वसनीय है।

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

    29

    यह हाल ही में और अधिक आदेश svndumpfilter साथ सीधा हो गया है। विवरण सबवर्सन प्रलेखन here में उपलब्ध हैं। असल में, विवादों से बचने के लिए (here समझाया गया), यह एक रेपो डंप लेता है और प्रत्येक प्रतिबद्धता को फिर से चलाता है, या तो किसी दिए गए फ़ाइल उपसर्ग को शामिल या छोड़कर। बेसिक वाक्य रचना:

    svndumpfilter exclude yourfileprefix <yourdump> yournewdump 
    

    को शामिल न करें शायद क्या सवाल प्रश्नकर्ता की तलाश में है, लेकिन आप भी इतनी के रूप में अपने स्वयं के भंडार के रूप में इसे बंद स्पिन शामिल उपयोग कर सकते हैं, कहते हैं, रेपो के एक सबट्री निकालें।

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

    svndumpfilter exclude --pattern '*.pdf' <dump> dump_nopdfs 
    

    इसके अलावा उपयोग की जानकारी svndumpfilter help और svndumpfilter help exclude फोन करके पाया जा सकता है।

    +0

    तो पूरी प्रक्रिया होगी: 'svnadmin डंप> myDump; svndumpfilter myFile < myDump > newDump को बाहर करें; बिल्ली newDump | svnadmin लोड myRepositoryURL; 'सही? – Shawn

    +0

    मैंने इसका परीक्षण नहीं किया है लेकिन यह सही दिखता है। –

    +10

    ठीक है, मैंने कोशिश की और प्रक्रिया इस तरह दिखती है: 'svnadmin डंप path_to_repository> old.dump; svndumpfilter file_prefix < old.dump > new.dump को बहिष्कृत करें; आरएम-आरएफ path_to_repository; svnadmin path_to_repository बनाते हैं; svnadmin load path_to_repository Shawn

    3

    मैं ने वही समस्या का सामना करना पड़ रहा था, सिवाय इसके कि मैं एक से अधिक फ़ाइलों, न सिर्फ एक फ़ाइल को हटाने के लिए की जरूरत है, और हम भी सबवर्सन 1.6 जो --patern निर्देश का समर्थन नहीं करता पर हैं।

    - बैकअप वर्तमान SVN

    $ cp -R /svn /svnSAVE 
    

    - डंप भंडार

    $ svnadmin dump /svn/root > svnDump 
    

    - नई डंप बनाने, जबकि बहुत बड़ी फ़ाइल

    $ svndumpfilter exclude "/path/file.csv" <svnDump> newSvnDump0 
    -- {note: should see a message like this}: 
    --   Dropped 1 node: 
    --     '/path/file.csv' 
    

    को छोड़कर - एक और नया बनाने एक और बहुत बड़ी फ़ाइल को छोड़कर डंप करें

    $ svndumpfilter exclude "/path/anotherFile.csv" <newSvnDump0> newSvnDump1 
    

    - पुराने SVN

    $ rm -rf /svn 
    

    को दूर - पुन: SVN निर्देशिका

    $ mkdir -p /svn/root 
    

    - साथ नए सिरे से भंडार फिर से आबाद - SVN

    $ svnadmin create /svn/root 
    

    पुन: डंप

    $ cat newSvnDump1 | svnadmin load /svn/root 
    

    - नई प्रतिलिपि में सहेजी गई प्रतिलिपि से conf फ़ाइलों का अद्यतन ...

    $ cp /svnSAVE/root/conf/* /svn/root/conf 
    

    अब भंडार 2 बड़ी फ़ाइलों को "file.csv" और "anotherFile.csv" शामिल नहीं होना चाहिए

    0

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

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

    और जाहिर है, कुछ एम-डिस्क या कुछ की तरह, केवल कुछ पढ़ने के लिए पूरी रिपो को वापस ले लें, इससे पहले कि आप इनमें से किसी भी चीज को करने के बारे में सोचें।

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