Svn का उपयोग करके किसी फ़ाइल का नाम कैसे बदलें?


84

जब मैं कोशिश करता हूं svn mv old_file_name new_file_name, मुझे मिलता है

 svn: Path 'new_file_name' is not a directory

सही तरीका क्या है? (क्षमा करें, यह बहुत तुच्छ लगता है, लेकिन मैं फंस गया हूं)।

पुनश्च। svn संस्करण 1.6.11 का उपयोग करना

संपादित करें ऐसा लगता है कि मुझे यह त्रुटि केवल तभी मिलती है जब new_file_nameकिसी फ़ाइल के नाम को संदर्भित करता है जो वर्तमान में संस्करण नियंत्रण में है। इस मामले में, मैं निश्चित रूप से कर सकता हूं

 mv old_file_name new_file_name
 svn delete old_file_name

हो सकता है कि आप पूरी भंडार पथ की जरूरत है, file://...या svn://...या http://...फाइल करने के लिए।
जॉन एलेक्सी

जवाबों:


113

यह व्यवहार इस आधार पर भिन्न होता है कि लक्ष्य फ़ाइल नाम पहले से मौजूद है या नहीं। यह आमतौर पर एक सुरक्षा तंत्र है, और कम से कम 3 अलग-अलग मामले हैं:

लक्ष्य फ़ाइल मौजूद नहीं है:

इस मामले svn mvमें निम्नानुसार काम करना चाहिए:

$ svn mv old_file_name new_file_name
A         new_file_name
D         old_file_name
$ svn stat
A  +    new_file_name
        > moved from old_file_name
D       old_file_name
        > moved to new_file_name
$ svn commit
Adding     new_file_name
Deleting   old_file_name
Committing transaction...

लक्ष्य फ़ाइल पहले से ही रिपॉजिटरी में मौजूद है:

इस स्थिति में, स्रोत फ़ाइल का नाम बदलने से पहले लक्ष्य फ़ाइल को स्पष्ट रूप से निकालने की आवश्यकता होती है। इसे निम्न प्रकार से लेन-देन में किया जा सकता है:

$ svn mv old_file_name new_file_name 
svn: E155010: Path 'new_file_name' is not a directory
$ svn rm new_file_name 
D         new_file_name
$ svn mv old_file_name new_file_name 
A         new_file_name
D         old_file_name
$ svn stat
R  +    new_file_name
        > moved from old_file_name
D       old_file_name
        > moved to new_file_name
$ svn commit
Replacing      new_file_name
Deleting       old_file_name
Committing transaction...

के आउटपुट में svn stat, Rइंगित करता है कि फ़ाइल को बदल दिया गया है, और उस फ़ाइल का इतिहास है।

टारगेट फ़ाइल पहले से ही स्थानीय रूप से (अप्रकाशित) मौजूद है :

इस स्थिति में, स्थानीय फ़ाइल की सामग्री खो जाएगी। यदि यह ठीक है, तो मौजूदा फ़ाइल का नाम बदलने से पहले फ़ाइल को स्थानीय रूप से हटाया जा सकता है।

$ svn mv old_file_name new_file_name 
svn: E155010: Path 'new_file_name' is not a directory
$ rm new_file_name 
$ svn mv old_file_name new_file_name 
A         new_file_name
D         old_file_name
$ svn stat
A  +    new_file_name
        > moved from old_file_name
D       old_file_name
        > moved to new_file_name
$ svn commit
Adding         new_file_name
Deleting       old_file_name
Committing transaction...

मुझे svn rm new_file_name में --force जोड़ने की आवश्यकता थी क्योंकि यह शिकायत करता था कि new_file संस्करण नियंत्रण में नहीं है।
मैथ्यू लॉक

.. और मुझे new_file_name नामक एक खाली फ़ाइल बनानी थी।
मैथ्यू लॉक

4
1.8.3 rm पर फिजिकल फाइल को हटा दिया गया, बस "svn mv ..." पर्याप्त था, यह निष्पादित करता है कि A D.
सोनिक सोल

2
यह अजीब है कि एसवीएन कितना पुराना है और इसका उपयोग करके किसी फ़ाइल का नाम बदलना कितना अजीब है।
घसन

1
@ घास: प्रश्न का शीर्षक भ्रामक हो सकता है। यह एक फ़ाइल को हटाने और उसी समय किसी अन्य फ़ाइल का नाम बदलने के बारे में है । यह उपयोग मामला सामान्य नहीं है, और अधिकांश वीसीएस के साथ थोड़ा मुश्किल है, खासकर अगर जानकारी इतिहास में दिखाई देनी चाहिए।
nosid

16

TortoiseSVN का उपयोग करना मेरे लिए विंडोज पर आसानी से काम करता है।

http://tortoisesvn.net/

राइट क्लिक करें फ़ाइल -> TortoiseSVN मेनू -> रेपो-ब्राउज़र -> रिपॉजिटरी में राइट क्लिक फ़ाइल -> नाम बदलें -> Enter दबाएं -> Ok पर क्लिक करें

SVN 1.8.8 TortoiseSVN संस्करण 1.8.5 का उपयोग करना


ऐसा नहीं है कि ओपी विंडोज के बारे में पूछ रहा था, लेकिन upvotes के विस्तार के लायक है: पूर्ण डेस्कटॉप एकीकरण का मतलब है कि आप बस एक्सप्लोरर से संदर्भ मेनू में ऐसा कर सकते हैं।
बार्टन

लेकिन अब मैं देख रहा हूं कि स्पष्ट रूप से एक लिनक्स प्रश्न पर एक विंडोज जवाब पोस्ट करने से यह एक बार नीचे-मतदान हुआ है। (drats, समय मेरे लिए मेरी मूल टिप्पणी को संपादित करने के लिए बाहर चला गया)
बार्टन

मैं उस समय विंडोज पर Cygwin का उपयोग कर रहा था, इसलिए कुछ क्रॉसओवर था।
तूफ़ान_एम २३

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

1
यह कृमि है, लेकिन आप फ़ाइल का इतिहास खो देंगे।
FokTheRock

6

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

svn mv file-name file-name_
svn mv file-name_ FILE_Name
svn commit

0

यह हो सकता है यदि आपने डिस्क पर नई निर्देशिका बनाई है तो SVN में इसे बनाएं / प्रतिबद्ध करें। आपको बस इतना ही चाहिए कि इसे SVN में बनाएं और बाद में करें:

$ svn mv etc/nagios/hosts/us0101/cs/us0101ccs001.cfg etc/nagios/hosts/us0101/ccs/
svn: E155010: Path '/home/dyr/svn/nagioscore/etc/nagios/hosts/us0101/ccs' is not a directory

$ svn status
?       etc/nagios/hosts/us0101/ccs

$ rm -rvf etc/nagios/hosts/us0101/ccs
removed directory 'etc/nagios/hosts/us0101/ccs'

$ svn mkdir etc/nagios/hosts/us0101/ccs
A         etc/nagios/hosts/us0101/ccs

$ svn move etc/nagios/hosts/us0101/cs/us0101ccs001.cfg etc/nagios/hosts/us0101/ccs/us0101accs001.cfg
A         etc/nagios/hosts/us0101/ccs/us0101accs001.cfg
D         etc/nagios/hosts/us0101/cs/us0101ccs001.cfg

$ svn status
A       etc/nagios/hosts/us0101/ccs
A  +    etc/nagios/hosts/us0101/ccs/us0101accs001.cfg
        > moved from etc/nagios/hosts/us0101/cs/us0101ccs001.cfg
D       etc/nagios/hosts/us0101/cs/us0101ccs001.cfg
        > moved to etc/nagios/hosts/us0101/ccs/us0101accs001.cfg

-4

आप इसे 3 चरणों का पालन करके कर सकते हैं:

 - svn rm old_file_name
 - svn add new_file_name
 - svn commit

4
यह दृष्टिकोण अच्छा नहीं है क्योंकि यह फ़ाइल का इतिहास खो देता है
user2913094
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.