2009-01-19 14 views
5

मैं दो यूआरएल का उपयोग कर एक SVN नकल करते हैं, मैं भंडार में एक 'सस्ता' प्रतिलिपि प्राप्त ...भंडार में नहीं किए जाने पर svn कॉपी सस्ता है?

svn copy http://repo_url/trunk http://repo_url/tags/release_foo 

लेकिन क्या काम कर निर्देशिका में नकल करते हैं और उसके बाद इस तरह यह वादा करता है, तो ..

svn copy trunk tags/release_foo 
svn commit tags/release_foo 

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

डॉको में उदाहरण हमेशा टैगिंग या ब्रांचिंग के लिए यूआरएल प्रतिलिपि बनाने के लिए यूआरएल का उपयोग करते हैं, लेकिन मुझे कुछ भी नहीं मिला जो स्पष्ट रूप से कहता है कि आपको डब्ल्यूसी को डब्ल्यूसी का उपयोग किसी प्रतिबद्धता के बाद नहीं करना चाहिए।

तो क्या ये दो विधियां समान हैं? क्या दोनों भंडार के अंदर एक सस्ती प्रतिलिपि बनाते हैं?

उत्तर

4

मेरा मानना ​​है कि "सस्ता" होने पर एक यूआरएल प्रतिलिपि और डब्ल्यूसी प्रतिलिपि काफी समान होती है। आपके डब्ल्यूसी में बनाई गई कोई प्रतिलिपि एक प्रतिलिपि नहीं है जैसे फ़ाइल सिस्टम पर फ़ाइल कॉपी करना।

svn स्मार्ट है कि यह मूल रूप से मूल से कुछ नए लिंक, शाखा या जो भी हो, से कुछ मुलायम लिंक बनाता है।

+0

परिवर्तन किए बिना कॉपी करना हमेशा एक सस्ता ऑपरेशन है। (सर्वर/डब्ल्यूसी <-> सर्वर/डब्ल्यूसी)। परिवर्तन अंतरिक्ष लेते हैं। –

+0

यदि कोई कार्रवाई 'सस्ता' है तो इसका क्या अर्थ है? क्या यह एक बुरा कदम है? यदि हां, तो एसवीएन का उपयोग करके टैग करने और/या शाखा का अनुशंसित तरीका क्या है? – Dave

+0

@ डेव: इस मामले में, प्रसंस्करण शक्ति और भंडारण स्थान के मामले में कार्रवाई सस्ता है (यानी यह प्रत्येक में से अधिक का उपयोग नहीं करता है, जो एक अच्छी बात है)। ऐसा इसलिए है क्योंकि एसवीएन केवल सूचना को संग्रहीत करेगा जो दर्शाता है कि एक प्रतिलिपि वास्तविक प्रतिलिपि बनाई गई फ़ाइलों/फ़ोल्डर्स नहीं थी। स्पष्टीकरण के लिए – rmeador

1

ऐसा मत करो:

svn merge <local copy>/branch <local copy>/trunk 

आपका इस तरह आदेश, इसी तरह परेशानी हो सकती है:

svn copy trunk tags/release_foo 
svn commit tags/release_foo 

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

टैग और शाखाओं को बनाने/प्रबंधित करने/विलय करने के लिए हमेशा भंडार URL का उपयोग करें। यह सुरक्षित है। यह गारंटी देता है कि आपकी कार्य प्रतिलिपि टैग/शाखा बनाने के लिए पुरानी नहीं है और यह भी गारंटी देता है कि सृजन लेनदेन है।

मुझे लगता है कि समस्या इस तरह हुआ हो सकता है:

  1. व्यक्ति क अद्यतन करता है उनके द्रव्यमान काम कर सब कुछ प्रतिलिपि
  2. व्यक्ति क कुछ टैग बनाता है, कुछ शाखाओं करता है, कुछ ऐसे मर्ज करता है, लेकिन के लिए प्रतिबद्ध नहीं है, अभी तक।
  3. व्यक्ति बी उन टैग के स्रोत में कुछ परिवर्तन करता है, या शाखा जो विलय हो गई थी।
  4. व्यक्ति ए प्रतिबद्ध करने की कोशिश करता है और svn उन्हें नहीं जाने देगा।

फिर से यह कई साल पहले था, इसलिए मुझे विशिष्टताओं को याद नहीं है, लेकिन वास्तव में आपके कामकाजी प्रतिलिपि को सेट करने का कोई अच्छा कारण नहीं है।

+0

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

+0

मैंने यह स्पष्ट करने के लिए संपादित किया है कि मेरा क्या मतलब है। हां यह पीआईबीसीएसी था। इस मामले में व्यक्ति ने ट्रंक या शाखा की बजाय पूरे उपवर्तन पेड़ की जांच की थी क्योंकि "यह आसान था"। यह वास्तव में चीजों को भी मक्स करता है। – Otto

+0

"इसके अलावा, एसवीएन में, आप केवल स्थानीय कामकाजी प्रति में विलय कर सकते हैं।" ... सही, वह स्थानीय कामकाजी प्रतिलिपि में स्थानीय कार्य प्रतिलिपि में विलय/करने की कोशिश कर रहा था। – Otto

5

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

यह कहा गया है कि यूआरएल प्रतिलिपि विधि को आम तौर पर ब्रांचिंग या टैगिंग के लिए प्राथमिकता दी जाती है क्योंकि आपको रिपोजिटरी रूट (सभी शाखाओं और टैग सहित) की जांच करने की आवश्यकता नहीं होती है - यह बहुत बड़ा होगा!)। सामान्य उपयोग केस शाखा/टैग सर्वर-साइड (यूआरएल प्रति का उपयोग करके) करना है, फिर अपने काम के लिए आवश्यकतानुसार शाखाओं/टैग देखें।

यदि आप किसी कारण से अपनी कार्यशील प्रतिलिपि में फ़ाइल या फ़ोल्डर की प्रतिलिपि बना रहे हैं (कहें कि आप एक वर्ग फ़ाइल को दो में तोड़ रहे हैं और आप आम इतिहास को संरक्षित करना चाहते हैं), तो बस अपने डब्ल्यूसी में svn copy का उपयोग करें।

+0

यह उस बिंदु का अधिक संक्षिप्त संस्करण है जिसे मैं बनाने की कोशिश कर रहा था, "आम तौर पर पसंदीदा" का अर्थ है "आप वाकई चीजों को नली बना सकते हैं"। :) – Otto

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