पिछले उत्तरों में से अधिकांश एक रिवर्स मर्ज का उपयोग कर रहे हैं, और यह आमतौर पर सही उत्तर है। हालाँकि, वहाँ एक स्थिति है (जो सिर्फ मेरे साथ हुआ है) जहां यह नहीं है।
मैंने गलती से एक छोटी सी परिवर्तन करते समय यूनिक्स लाइन के अंत के साथ फाइल को डीओएस लाइन के अंत में बदल दिया, और इसे प्रतिबद्ध किया। यह आसानी से पूर्ववत है, या तो लाइन एंडिंग को बदलकर और फिर से मर्ज करके, या रिवर्स मर्ज करके, लेकिन यह svn blame
फ़ाइल के हर लाइन के स्रोत के रूप में मेरे संपादन सूची बनाने का प्रभाव है । (दिलचस्प बात यह है कि विंडोज पर TortoiseSVN इससे प्रभावित नहीं होता; केवल कमांड लाइन svn blame
।)
यदि आप रिपोर्ट के अनुसार इतिहास को बनाए रखना चाहते हैं svn blame
, तो मुझे लगता है कि आपको निम्नलिखित कार्य करने की आवश्यकता है:
- फ़ाइल को हटा दें और प्रतिबद्ध करें।
- रिपॉजिटरी में, फ़ाइल की पिछली अच्छी कॉपी को हेड में कॉपी करें, और कमिट करें।
- किसी भी संपादन को पुनर्स्थापित करें जिसे आप रखना चाहते हैं।
विलोपन थोड़ा डरावना है, लेकिन याद रखें कि आपके पास हमेशा रिपॉजिटरी में सहेजी गई फ़ाइल होती है, इसलिए इसे पुनर्स्थापित करना कोई बड़ी बात नहीं है। चरणों का वर्णन करने के लिए यहां कुछ कोड दिए गए हैं। मान लें कि xxx
अंतिम अच्छी प्रति का संशोधन संख्या है।
svn rm svn+ssh://path/to/file
svn copy svn+ssh://path/to/file@xxx svn+ssh://path/to -m"Restore good copy"
svn update
<restore the edits>
svn commit -m"Restore edits"
ध्यान दें कि रिपॉजिटरी में एक कॉपी के लिए, गंतव्य को एक निर्देशिका होने की आवश्यकता है, न कि एक फ़ाइल नाम।