2010-06-08 9 views
12

मैं वर्तमान में अपने एसवीएन सर्वर (जो मेरे वेब होस्ट पर स्थित है) में फाइलें करता है, और वहां से मैं एसएसएच में और अपने htdocs में कार्य निर्देशिका में निर्यात करता हूं।एसवीएन निर्यात केवल बदली गई फ़ाइलें

जैसा कि मेरा आवेदन बड़ा और बड़ा हो जाता है, एक पूर्ण निर्यात समय की बर्बादी है। मैं केवल उन फ़ाइलों को निर्यात कैसे कर सकता हूं जो बदले गए हैं?

svn export -r xxxx:HEAD http://svn/ 

क्या कोई समाधान मिला है, तो शायद यह मदद कर सकता है? मैं स्वचालित रूप से संशोधन कैसे प्राप्त कर सकता हूं?

+0

इसके लिए एक बाश समाधान यहां है: http://stackoverflow.com/questions/4783362/exporting-only-changed-files-from-subversion-maintaining- निर्देशिका- संरचना – AnOldMan

उत्तर

1

मुझे यकीन नहीं है कि यह वही समस्या है जिसका आप जिक्र कर रहे हैं, लेकिन वेब अनुप्रयोग के लिए फाइलें करते समय मैं काम कर रहा हूं, मैंने svn2ftp.py एसवीएन हुक का उपयोग स्वचालित रूप से एफ़टीपी संशोधित फ़ाइलों को करने के लिए किया है स्टेजिंग सर्वर। यह स्थापित करना बहुत आसान था और मुझे इसके साथ कोई समस्या नहीं थी।

2

मैं स्थानीय रिपोजिटोर में एक एसवीएन चेकआउट करता हूं, और फिर परिवर्तित फ़ाइलों को वेब रूट में rsync करता हूं। या बस वेबूट में चेकआउट करें और सभी .svn निर्देशिकाओं तक पहुंच से इंकार कर दें।

+1

आप इतने निश्चित क्यों हैं, कि नहीं अन्य संभावनाएं निकलती हैं? असल में, यहां कई जवाब भी दिए गए हैं। बैश स्क्रिप्ट, पर्ल स्क्रिप्ट, svn2web इत्यादि जैसे टूल का उपयोग करना। आपको इतना यकीन है कि आपने सभी संभावित विकल्प प्रस्तुत किए हैं? – trejder

+0

+1 ओके, अन्य संभावनाएं हैं। मैंने जवाब बदल दिया। – Daniel

+0

ग्रीट! :] आपका दिन शुभ हो! :] – trejder

2

कोई शुद्ध SVN समाधान मौजूद है कि मैं के बारे में पता कर रहा हूँ, लेकिन आप यह कर सकते:

svn update | egrep "^(A|U)[ ]+(.*)" | cut -b 2 | xargs -i cp -R "{}" /path/to/public_html 

अपने कार्यशील निर्देशिका में, आपको नई जानकारी प्राप्त और उत्पादन को पार्स - svn update

A और U के साथ चिह्नित सभी फाइलें प्रति उम्मीदवार हैं - egrep "^(A|U)[ ]+(.*)"

फ़ाइल नाम प्राप्त करने के लिए A या U हटाएं - cut -b 2

आपके अंतिम अपडेट के बाद से बदली गई फ़ाइलों की प्रतिलिपि बनाएँ - xargs -i cp -R "{}" /path/to/public_html

(बेकार शेल-फू के लिए खेद है, अभी भी सीख रहा है)।

संपादित करें: उपयोग cut बजाय tr (निर्धारित)

+1

अच्छा कमांड लाइन के लिए +1। मैं इससे छोटी बैश स्क्रिप्ट तैयार करूंगा। इसे फिर से "पुटी" "रिमोट कमांड" सुविधा का उपयोग करके दूरस्थ रूप से बुलाया जा सकता है, ताकि आप अपने डेस्कटॉप पर किसी आइकन के क्लिक के साथ अपडेट कर सकें। – Daniel

+0

@ हुडोलजेव: आपके समाधान को मिश्रित करने की कोई संभावना है, तो यह स्थानीय पथ की बजाय एफ़टीपी पर रिमोट सर्वर पर केवल परिवर्तन फ़ाइलों का निर्यात करेगा? विकास सर्वर से भंडार का नवीनतम संस्करण प्राप्त करने के लिए ग्राहक मशीन पर चल रहे एक FTP सर्वर पर आवश्यकता है। अग्रिम धन्यवाद ... – trejder

+0

अपलोड के लिए, मैं अंतिम भाग को बदल सकता हूं: 'xargs -i wput "{}" ftp: // server.url/', या यहां तक ​​कि एससीपी का उपयोग करें:' xargs -i scp -r "{}" server.url:/path/to/whatever'। अनुमान लगाया नहीं है, बस अनुमान लगाया। आपके द्वारा प्रदत्त – hudolejev

6

यह कछुआ SVN के उपयोग के साथ काम करता है। मुझे यकीन नहीं है कि इसे इसके बिना किया जा सकता है।

मेरे पास एक समान समस्या थी जहां मैंने कई हज़ार फाइलों में परिवर्तन किए थे (नहीं पूछें ... यह एक विरासत समस्या है!) 10 में से हजारों में से, इसलिए मैं पूरी निर्देशिका या भरोसेमंद अपलोड नहीं करना चाहता था तारीखों से सही ढंग से मिलान करने के लिए winscp पर (चूंकि यह सर्वर यूएस में है और एयूएस में है)।

तो मैंने एसटीएन में चेक-इन किया, फिर टोर्टोइस एसवीएन में "लॉग लॉग" के माध्यम से। मैंने फिर हालिया संशोधन पर राइट-क्लिक किया (हालांकि यह आपके द्वारा जारी किया गया कोई भी संशोधन हो सकता है) और "पिछली संशोधन के साथ तुलना करें" चुना गया। मैंने तब दिखाई देने वाली सभी फाइलों का चयन किया (CTRL-A) और राइट-क्लिक "निर्यात चयन" और बीएएम सही फ़ोल्डर संरचना में सभी अद्यतन फ़ाइलों को सहेजा गया है और अपलोड के लिए तैयार हैं।

0

svn2ftp 0.3 - बैश स्क्रिप्ट। उपयोग करने के लिए स्वतंत्र, svn भंडार से ftp करने के लिए फ़ाइलों को निर्यात करें। (रीकिंग संशोधन) फ़ाइलें: start.sh - स्क्रिप्ट, सेटिंग्स.प्रोपर्टीज - ​​एसवीएन, एफटीपी, प्रोजेक्ट गुण।

+0

यूआरएल अब और बाहर नहीं निकलता है। क्या किसी को कोई ज्ञान है, जहां यह स्क्रिप्ट पाई जा सकती है? मैं ठीक से svn2ftp के बारे में पूछ रहा हूं, क्योंकि svn2web जैसे समान उपकरण हैं, जिन्हें मैंने कोशिश की है और परिणाम से संतुष्ट नहीं हैं। – trejder

1

मुझे लगता है कि यह मेरे पास एक समस्या के समान है। अक्सर मुझे अपने वेब सर्वर पर केवल उन फ़ाइलों को ftp करने की आवश्यकता होती है जो हाल ही में बदले गए थे। वेब सर्वर पर रुनक उपलब्ध नहीं था, इसलिए मैं इसका उपयोग नहीं कर सका।
मेरे काम में एक और समाधान है जिसका उपयोग मैं करता हूं।मैं ट्रैक के साथ संयोजन में एसवीएन का उपयोग करता हूं जिसे मैंने अपने स्थानीय सर्वर पर स्थापित किया है। अन्य ट्रैक में से दो संशोधनों के बीच परिवर्तन दिखाने या कुछ बदलावों में पेश करने की संभावना है। यदि आपने कभी भी ट्रैक का उपयोग नहीं किया है, तो कृपया अपने भंडार को ब्राउज़ करने के लिए ट्रैक प्रोजेक्ट के होम पेज पर जाएं। यह सार्वजनिक रूप से उपलब्ध है।
उदाहरण के तौर पर मैंने नवीनतम स्थिर रिलीज (इस पोस्ट को लिखने के पल में) का विस्तार किया, जो 0.12 है। नवीनतम संशोधन जो मैं देख सकता हूं वह 10792 है। आप इस शाखा के लिए संशोधन लॉग प्रदर्शित करने के लिए संशोधन संख्या पर क्लिक कर सकते हैं। अब आप कर सकते हैं दो बातें: Diff कॉलम में

  • या तो दो का चयन संशोधन और क्लिक देखें बदलता है बटन
  • उन दोनों के बीच अंतर देख या में एक छोटा सा गियर आइकन पर क्लिक रेव स्तंभ के लिए कुछ संशोधन से संबंधित परिवर्तन देखने के लिए (यह page देखें)।

दोनों मामलों में आप संशोधित फ़ाइलों की सूची के साथ समान पृष्ठ देखेंगे और पुरानी और नई फ़ाइलों के बीच अच्छी तरह से स्वरूपित परिवर्तन देखेंगे। पृष्ठ के निचले हिस्से में आप दो प्रारूपों में अंतर डाउनलोड करने के लिए लिंक पा सकते हैं: एकीकृत diff और ज़िप। आखिरी एक बिल्कुल वही है जो आपको चाहिए - एक ज़िप संग्रह जिसमें केवल संशोधित फाइलें हैं। अब आप संग्रह को अनजिप कर सकते हैं और संशोधित फ़ाइलों को वेब सर्वर पर आसानी से ftp कर सकते हैं। बड़ी परियोजनाओं में यह वास्तव में समय बचाता है।
यदि आप ट्रैक से परिचित नहीं हैं तो कृपया ट्रैक के प्रलेखन को प्रोजेक्ट के वेब पृष्ठों पर उपलब्ध देखें या यदि आप चाहें तो आपको Managing Software Development with Trac and Subversion पुस्तक मिल सकती है, मुझे वास्तव में उपयोगी लगता है।

7

मैं निम्नलिखित बैश स्क्रिप्ट का उपयोग किया गया है:

for i in $(svn diff --summarize -r 1:2 http://repo_path | awk '{ print $2 }'); do p=$(echo $i | sed -e 's{http://repo_path/{{'); mkdir -p $(dirname $p); svn export $i $p; done 

hudolejev के समाधान की तरह, यह संशोधन (1 और 2) इस मामले में बीच परिवर्तन आउटपुट और फ़ाइलों और फ़ोल्डरों से अधिक लूप।

+0

hudolejev के समान प्रश्न: आपके समाधान को मिश्रित करने की कोई संभावना है, तो यह स्थानीय पथ के बजाय, दूरस्थ सर्वर पर केवल एफ़टीपी पर फ़ाइलों को निर्यात करने का निर्यात करेगा? विकास सर्वर से भंडार का नवीनतम संस्करण प्राप्त करने के लिए ग्राहक मशीन पर चल रहे एक FTP सर्वर पर आवश्यकता है। अग्रिम धन्यवाद ... – trejder

+0

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

0

किसी अन्य राहगीरों के लिए एक नोट ... आप कछुआ साथ काम करने में @ User123342234 के समाधान का एक ही लाभ चाहते हैं, लेकिन उन्हें निर्यात करने में सक्षम होने से पहले अपने साझा/दूरस्थ भंडार में परिवर्तन के लिए प्रतिबद्ध नहीं करना चाहते हैं। टोर्टोइज़ (थोड़ी सी ज्ञात विशेषता) का उपयोग करके local svn repository बनाकर एक ही परिणाम प्राप्त किया जा सकता है। फिर आप अपनी रिमोट शाखा निर्यात कर सकते हैं और इसे अपने स्थानीय भंडार में आयात कर सकते हैं। फिर अपने स्थानीय भंडार की कार्यशील प्रतिलिपि पर रिमोट रिपोजिटरी की अपनी स्थानीय संशोधित कार्यशील प्रति निर्यात करें और इसे प्रतिबद्ध करें। अब आप प्रतिबद्ध परिवर्तनों को निर्यात करने के लिए स्थानीय भंडार पर "लॉग दिखाएं" का उपयोग कर सकते हैं, सभी को पहले साझा/दूरस्थ भंडार के लिए प्रतिबद्ध किए बिना। जरूरी नहीं कि मामूली, लेकिन कम से कम एक बार में मेरे लिए काफी मददगार था।

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