2009-10-27 10 views
13

मैं एक PHP उपकरण बना रहा हूं जो एक भंडार से जुड़ता है, काम की सूची डाउनलोड करता है और उन्हें स्थानीय रूप से स्टोर करता है। हालांकि, इस संभावना के कारण कि कुछ रिपॉजिटरीज बहुत अधिक हैं और लंबे समय तक प्रतीक्षा समय और संभावित समय-बहिष्कार/त्रुटियों में अपने लॉग परिणामों को पकड़ते हैं, मैं एसिंक अनुरोधों का उपयोग करके प्रत्येक प्रतिबद्ध संदेश डाउनलोड करना चाहता हूं।एसवीएन: क्या दिए गए पथ के लिए संशोधन संख्याओं की सूची प्राप्त करना संभव है?

तो, मैं संशोधन इतिहास में एक प्रारंभ और अंत बिंदु है, और मैं इस तरह सभी लॉग हड़पने कर सकते हैं:

svn log -r <from_revision>:<to_revision> <REPO_URL>

... और मैं संभवतः एक XML फ़ाइल है, जिसके साथ खत्म हो जाएगा इतना बड़ा है कि इसे डाउनलोड करने में लंबा समय लगेगा, लंबे समय तक और बहुत सारे संसाधनों को पार्स करने के लिए, और स्टोर करने में लंबा समय लगेगा।

अगर मैं प्रारंभ और अंत बिंदु पता है, मैं एक के बाद संशोधन एक हड़पने के लिए एक के लिए() पाश बना सकते हैं:

svn log -r <revision> ...

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

तो, मैं कुछ इस तरह की जरूरत है:

  • "मुझे इस पथ के लिए संशोधन संख्या की सूची देने के", या:
  • "मुझे इस पथ के लिए संशोधन संख्या की सूची देने के लिए, के बीच और

इस तरह मैं भंडार पथ के लिए मान्य संशोधन की एक सरणी बनाने के लिए और उन्हें एक एक करके प्राप्त करने में सक्षम हो जाएगा।

सभी सुझाव, स्वागत है अग्रिम धन्यवाद ।

+0

क्या आपने एसवीएन सीएलआई निष्पादन योग्य को कॉल करने के बजाय एसवीएन बाइंडिंग का उपयोग करने पर विचार किया है? आईआईआरसी, वे पहले से ही PHP के लिए मौजूद हैं। यह एक और अधिक प्रोग्रामेटिक और कम त्रुटि-प्रवण इंटरफ़ेस होगा। – rmeador

उत्तर

9

मुझे लगता है कि आपकी सबसे अच्छी शर्त निम्नलिखित svn log -l 100 0:{$newest} .\ करना होगा जो किसी दिए गए निर्देशिका या फ़ाइल के लिए पहले 100 लॉग पुनर्प्राप्त करेगी। फिर लौटाए गए अंतिम संशोधन संख्या को पढ़ें, फिर अगले 100 svn log -l 100 {$last_ret_log}:{$newest} .\

अनुरोध करें कि आपको प्रत्येक अनुरोध के साथ 99 नई लॉग प्रविष्टियां मिलें, लेकिन आप उन सभी को प्राप्त नहीं करेंगे।

+0

ओह मुझे इसे पहले हड़पने पर जोड़ना चाहिए, आप #: # बिट को छोड़ना चाहेंगे क्योंकि आप नहीं जानते कि पहला संशोधन क्या था। उफ़। –

+0

यह एक अच्छा समझौता की तरह लगता है। प्रति पुनरावृत्ति के कई लॉग प्राप्त करें, लेकिन उनमें से बहुत से नहीं मिलता है। बीटीडब्ल्यू, 'एसवीएन लॉग' को भंडार के भीतर किसी भी पथ के लिए' svn log 1: HEAD 'के रूप में उपयोग किया जा सकता है, लेकिन एसवीएन 1 और HEAD संशोधन के बीच लॉग लौटने के लिए पर्याप्त स्मार्ट होगा जो केवल पथों को प्रभावित करता है जो केवल मौजूद हैं अनुरोध किया गया । –

+0

जानना अच्छा है। मैं आम तौर पर अपने सभी विचलन आवश्यकताओं के लिए संस्करणों का उपयोग करता हूं .. हालांकि मेरे पास कुछ स्क्रिप्ट हैं जो प्रबंधन को देने के लिए svn लॉग का विश्लेषण करती हैं। :) –

2

आप svn list पर देख सकते हैं। तो अपने उद्देश्य के लिए :


$ svn list --verbose file:///var/svn/repos 
    16 sally   28361 Jan 16 23:18 README.txt 
    27 sally    0 Jan 18 15:27 INSTALL 
    24 harry    Jan 18 11:27 examples/ 

यह सूचीबद्ध करता है किसी भी फाइल के अंतिम (सिर) संशोधन।

+0

धन्यवाद, लेकिन यह सभी संशोधनों की सूची नहीं देता है, केवल प्रत्येक पथ के लिए अंतिम। –

3

यदि आपके पास अपने सबवर्जन सर्वर पर रिपोजिटरी पेड़ तक पहुंच है, तो आप संशोधन संख्याओं की सूची प्राप्त करने के लिए svnlook history का उपयोग कर सकते हैं।

अधिक जानकारी http://svnbook.red-bean.com/en/1.1/re49.html पर मिल सकती है।

+0

यिक्स दिया जा सकता है, आपने लगभग समस्या हल की है, लेकिन एकमात्र मुद्दा यह है कि 'svnlook' URL के साथ काम नहीं करता है । इस एप्लिकेशन का उपयोग यूआरएल का उपयोग कर डेटा रिमोट रिपॉजिटरीज को पुनर्प्राप्त करने के लिए किया जाएगा, पथ नहीं :( –

+0

धन्यवाद! इससे मेरी समस्या हल हो सकती है। क्या यह वही संशोधन करता है जब आप पथ पर लॉग दिखाएँ क्लिक करते हैं तो TortoiseSVN लौटाता है? – styfle

2
svn log url -l limitNumber - r fromReversion:toReversion 

यू अगले बड़े (छोटे) प्रत्यावर्तन (संस्करण) को खोजने के लिए उदाहरण

svn log url -l 4 -r someVersion:1 
or 
    svn log url -l 4 -r 99: 3 

fromReversion toReversion से अधिक के लिए अगर यू अगला नया (बड़ा) प्रत्यावर्तन को खोजने के लिए (चाहते हैं चाहते हैं संस्करण)

svn log url -l 4 -r someVersion:head 
or 
    svn log url -l 4 -r 3:99 
    fromReversion lower than toReversion 
3

मैं अभी भी एक समान परिणाम प्राप्त करने की कोशिश कर रहा हूं। मैं सिर्फ एक विशेष शाखा के लिए सभी संशोधन संख्या चाहता हूं।

मुझे निम्नलिखित मददगार मिलते हैं।

svn log <svn_server_path> | grep "^r[0-9]\+ | " | cut -d' ' -f1 | cut -c2- > revisions.csv 

यह मुझे अलग-अलग लाइनों पर सभी संशोधन संख्याओं के साथ एक फ़ाइल देता है।

उम्मीद है कि आप या किसी और को यह उपयोगी लगेगा।

हमारे रेपो में 25000 से अधिक संशोधन हैं और इस फ़ाइल को बनाने में कुछ सेकंड लगते हैं।

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