2008-12-02 6 views
27

उदाहरण:svn प्रतिलिपि के उपयोग क्या हैं?

$ svn copy foo.txt bar.txt 
A bar.txt 
  • जब आप इस तकनीक का प्रयोग करेंगे, और क्यों?
  • क्या यह आदेश (svn की "लाल पुस्तक" से लिया गया) <foo.txt> की एक प्रति बनाता है जबकि इसे <bar.txt> के साथ साझा करने के इतिहास को संरक्षित किया जाता है?
  • यदि मैं <bar.txt> बदल रहा हूं, तो <foo.txt> का क्या होगा?

अन्य आधुनिक प्रणालियों (ClearCase, Accurev, लाज़िमी) में इस के समकक्ष थे क्या हैं?

मुझे उस बिंदु पर जोर दें जो मैं खोज रहा हूं:
क्या इस तरह की शाखा स्तर पर शाखाबद्ध है?
यदि आप उसी शाखा में इसका उपयोग करते हैं तो क्या होता है, यानी फ़ाइल की एक प्रति बनाएं और उस नई फ़ाइल को बदलने से शुरू करें। सब एक ही शाखा में?
मैं समझता हूं कि इसका उपयोग टैगिंग के लिए भी किया जाता है लेकिन फ़ाइल स्तर पर <svn copy> प्रदर्शन करते समय मुझे क्या दिलचस्प लगता है।

उत्तर

37

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

बीटीडब्लू: यह एसवीएन की कुछ विशेषताओं में से एक है, लेकिन गिट नहीं करता है (गिट तथ्य के बाद कोड की उत्पत्ति का अनुमान लगाने का प्रयास करेगा, खासकर यदि आप -C कमांड में जोड़ते हैं)।

+2

अच्छा, मैंने पहले इसे नहीं देखा है। –

+0

स्पष्ट रूप से गिट यह कर सकता है - डस्टिन का [उत्तर] देखें (http://stackoverflow.com/a/335791/44390)। – mskfisher

+1

@mskfisher गिट यह अनुमान लगाकर कि कौन सी फाइलें समान दिखती हैं (यदि आप '-C' विकल्प/config सक्षम करते हैं), फ़ाइल की उत्पत्ति के बारे में स्पष्ट मेटाडेटा संग्रहीत नहीं करते हैं। यदि आप बहुत सी लाइनों को संशोधित करते हैं तो गिट इसे समझने में सक्षम नहीं होगा (चारों ओर काम करने के लिए मैं दो काम करता हूं: एक अपरिवर्तित फ़ाइल प्रतिलिपि वाला दूसरा और दूसरा बदलाव जो मैं बनाना चाहता था, लेकिन यह बहुत ही सुरुचिपूर्ण नहीं है)। – Kornel

23

आप इस तकनीक का उपयोग कब करेंगे, और क्यों?

टैग बनाने के लिए, और शाखाएं बनाने के लिए, हालांकि आमतौर पर आप इसे एक फ़ाइल के बजाय निर्देशिका पर उपयोग करेंगे। एक टैग एक या अधिक फ़ाइलों की एक प्रति है, जिसे आप सुविधा के लिए रखते हैं लेकिन फिर कभी नहीं बदलते हैं। एक शाखा एक या अधिक फ़ाइलों की एक प्रति है, जो तब जबकि यह के इतिहास के संरक्षण bar.txt साथ साझा करने की मूल

से अलग से विकसित इस आदेश foo.txt की एक प्रतिलिपि बनाने करेगा?

काफी, foo.txt के इतिहास को प्रभावी ढंग से bar.txt के इतिहास में कॉपी किया जायेगा नहीं, तो एक अतिरिक्त प्रवेश का संकेत है कि यह foo.txt से नकल किया गया था bar.txt के इतिहास में दिखाई देता है, और उसके बाद वे स्वतंत्र हैं। तो प्रतिलिपि के बिंदु तक इतिहास समान/साझा है।

यदि मैं bar.txt बदल रहा हूं, तो foo.txt क्या होगा?

कुछ भी नहीं, वे पूरी तरह से अलग हैं। लेकिन आप बाद में एक से दूसरे में परिवर्तन विलय कर सकते हैं।

+0

मेरा मानना ​​है कि कॉपी इतिहास को कुशलतापूर्वक स्टोर करने के लिए पर्याप्त स्मार्ट भी होगी ... अगर फ़ाइल का लंबा इतिहास है, तो यह महत्वपूर्ण स्थान बचाता है। लॉग के अपडेट भी उन फ़ाइलों के बीच साझा किए जाएंगे जिन्हें मैं मानता हूं। –

+0

लॉग = लॉग संदेश। –

+0

हां, मुझे यकीन है कि यह सही है। एसवीएन जोर से विज्ञापित करता है कि फ़ाइल एक "तार्किक" प्रति है, लेकिन डेटाबेस में फ़ाइल की सामग्री को डुप्लिकेट नहीं करती है। यह दावा बकवास होगा अगर यह पूरे इतिहास पर लागू नहीं होता है, और टैगिंग डीबी स्पेस में अविश्वसनीय रूप से महंगा होगी। जो यह नहीं है –

1

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

+0

यह सुनिश्चित नहीं है कि इसे क्यों वोट दिया गया है - मैंने इसे स्वयं किया है। इसका मतलब यह है कि यदि आप बॉयलरप्लेट (कॉपीराइट नोटिस और ब्ला ब्लाह) को बदलते हैं, तो जो भी व्युत्पन्न फाइलों में परिवर्तन को विलय करना आवश्यक है, वह सामान्य ट्रंक-> शाखा विलय के समान ही ऑपरेशन है। –

8

अन्य आधुनिक प्रणालियों (ClearCase, Accurev, लाज़िमी) में इस के समकक्ष थे क्या हैं?

गिट नोटिस करेगा कि फ़ाइल एक सादे प्रतिलिपि पर समान है और इसे एक प्रति के रूप में दिखाएं।

+1

कृपया वर्णन करें कि आपको यह क्यों गलत लगता है कि मैं इसे सही कर सकता हूं और केवल वोट नहीं दे सकता। – Dustin

+0

यह कमाल है! +1 –

1

शाखा सबवर्सन में प्रथम श्रेणी का नागरिक नहीं है, क्योंकि इसे निर्देशिका के रूप में "कार्यान्वित" किया जाता है।

इसलिए, svn copy उसी शाखा (निर्देशिका) में फ़ाइल की शाखा की तरह अनुमति देता है। आप बाद में प्रतिलिपि फ़ाइल को पहले में विलय कर सकते हैं। लेकिन यह सिर्फ एक फ़ाइल के लिए बीमार अनुकूल है, के रूप में, this thread

ClearCase में बराबर में mentionned

element * .../myBranchForCopy/LATEST 
element /myPath/myFile /main/myBranch/LATEST -mkbranch myBranchForCopy 

हालांकि की तरह एक का चयन शासन होगा इस दृश्य एक फ़ाइल शाखाओं के लिए बनाया है, आप एक समय में केवल foo.txt देखें (या तो myBranch में, या यदि यह चेक-आउट है, myBranchForCopy में)। कोई असली "प्रतिलिपि" नहीं है, यह वही तत्व है। किसी भी मर्ज किया जाएगा के बीच:

9

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

1

svn copy अनजाने में एक फ़ाइल हटा दिए जाने के बाद आसान हो गया। मैंने पूछा है कि question एक accoring anwer देखें।

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