2011-06-13 16 views
14

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

संपादित करें: अब तक आपके उत्तरों के लिए बहुत बहुत धन्यवाद।

मुझे पता है कि आप इसे एपीआई और कोड, यकीन नहीं करता है, तो किसी भी SVN आदेश ऐसा नहीं करता है के साथ क्या कर सकते हैं ...

बहुत धन्यवाद।

+2

आप --depth = फ़ाइलों, या --depth = खाली का उपयोग करके उथले चेकआउट कर सकते हैं, फिर 'svn अद्यतन फ़ाइल-टू-चेंज.एक्सएमएल'। लेकिन वेबडैव का उपयोग करके फ़ाइल को अपडेट करना संभव हो सकता है, या एसवीएन क्लाइंट एपीआई का उपयोग करके अपना खुद का क्लाइंट लिखना संभव हो सकता है। – Rup

+0

अद्यतन से आपका क्या मतलब है? वर्तमान फ़ाइलों को बदलें या परिवर्तनों को मर्ज करें और बाद में संभवतः प्रतिबद्ध करें? – Yossi

उत्तर

22

क्या समस्या है कि आप चेकआउट से परेशान नहीं होना चाहते हैं, या क्योंकि आप डरते हैं कि यदि आप चेकआउट करते हैं, तो आपको बहुत सारी फाइलों की जांच करनी होगी?

आपको सबवर्जन में चेकआउट करना है। आप कामकाजी प्रति के बिना बस परिवर्तन जमा नहीं कर सकते हैं। (पूरी तरह सच नहीं है, तो आप एक चेकआउट बिना svn delete और svn mkdir कर सकते हैं।)

लेकिन, आप फ़ाइलों है कि --depth स्विच के साथ की जाँच की हो की मात्रा को सीमित कर सकते हैं। उदाहरण के लिए, आप निम्न कार्य कर सकते हैं:

$ svn co --depth=empty http://myserver/myrepos/mydirectory 

यह निर्देशिका की जांच करेगा, लेकिन इसमें किसी भी फाइल के बिना। तो तुम सिर्फ फाइलों आप संशोधित करना चाहते का एक svn update कर सकते हैं, फिर उन परिवर्तनों को प्रतिबद्ध:

$ cd mydirectory   #Enter the empty working copy just checked out 
$ svn update fileToChange #Adds file you want to change to your working dir 
$ edit fileToChange.xml 
$ svn commit -m "Modified 'fileToChange.xml' with latest version" 

यह आपको पूरी निर्देशिका चेकआउट बिना फ़ाइल fileToChange.xml बदलने के लिए अनुमति देगा।

+0

मैंने इसका परीक्षण नहीं किया है, लेकिन अगर यह वास्तव में काम करता है, तो यह एकदम सही समाधान है ... –

+0

ने मेरी जेबॉस तैनाती निर्देशिका की एक एसवीएन प्रतिलिपि के खिलाफ इसका परीक्षण किया जिसमें युद्ध फाइलों के कई गिग हैं। यह एक ऐसी प्रणाली से नई युद्ध फ़ाइल करने का एक शानदार तरीका है जिसमें कार्यशील प्रति नहीं है। –

+0

बस 'svnmucc' का उपयोग करें – bahrep

2

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

आप स्पैस विकल्पों का उपयोग करके एक कार्यशील प्रतिलिपि की जांच कर सकते हैं, ताकि आप उस 1 फ़ाइल के साथ डब्ल्यूसी बना सकें, पूरे भंडार को चेकआउट करने की आवश्यकता नहीं है। वैकल्पिक रूप से, आप वेबडैव का उपयोग करके रेपो का पर्दाफाश कर सकते हैं, फिर आप बस पुरानी फाइल पर नई फाइल कॉपी कर सकते हैं और ऑटो-प्रतिबद्ध विकल्प diff की गणना करेगा और फ़ाइल को चेकइन करेगा।

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

0

आप स्थानीय रूप से फ़ोल्डर को चेक किए बिना फ़ाइल अपडेट नहीं कर सकते हैं। हालांकि एक शॉर्टकट है: पूरे रिपोजिटरी को चेकआउट न करने के लिए, आप केवल उप-फ़ोल्डर चेकआउट कर सकते हैं जहां आप जिस फ़ाइल को अपडेट करना चाहते हैं वह है।

अपने प्रतिनिधि https://your.domain/myrep पर है, तो आप बाहर https://your.domain/myrep/myfolder

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

4

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

आप svn import उपयोग कर सकते हैं फ़ाइलों को अद्यतन करने के

कुछ की तरह: मैं कई मामलों में जहां मैं इस तरह कुछ स्वचालित चेकइन करते हैं, मैं इस समाधान काफी अच्छा पाया है है

svn import -m "updating the xml" local.xml http://server/path/to/repo/server.xml 

पकड़ने है कि आप पहले से मौजूद फ़ाइल आयात नहीं कर सकते, तो आप एक को हटाएं और फिर आयात जारी करने के लिए करना होगा:

svn delete -m "deleting for update" http://server/path/to/repo/server.xml 

आप इतिहास खो देते हैं, लेकिन एक बहुत ही सरल है और फ़ाइल को अद्यतन करने के लिए हल्के तरीके से और आप जो कर रहे हैं उस पर पूरी तरह से निर्भर है। यदि आप इतिहास के विलोपन और हानि से सहज नहीं हैं, तो आपको अन्य उत्तरों द्वारा सुझाए गए तरीकों का उपयोग करना होगा।

1

यदि आपके पास सबवर्सन 1.8 या बाद का क्लाइंट है, तो आप svnmucc put कमांड का उपयोग करके रिपॉजिटरी को चेक किए बिना एक या एक से अधिक मौजूदा फ़ाइलों को जोड़ या अपडेट कर सकते हैं। http://svnbook.red-bean.com/en/1.8/svn.ref.svnmucc.re.html देखें।

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