मैं SVN प्रतिबद्ध संदेश संपादित क्यों नहीं कर सकता?


12

मैं SVN का उपयोग कर रहा हूँ। कभी-कभी मुझे कुछ याद आता है जब मैं एक प्रतिबद्ध संदेश लिखता हूं। लेकिन एक बार यह प्रतिबद्ध होने के बाद, इसे वापस नहीं लाया जा सकता है, और यहां तक ​​कि मैं संदेश को संपादित नहीं कर सकता। उन्होंने इसमें संपादन कार्य क्यों नहीं किया?


7
याद दिलाते हैं । डेव.कैप की कहानी thedailtywtf पर
फॉल्कन

1
बस git का उपयोग करें , यह कमिट्स को मर्ज करने, संदेशों को संपादित करने और अपने इतिहास के साथ जो कुछ भी आपको पसंद है उसे करने की अनुमति देता है।
एसके-तर्क

या यदि आप नहीं कर सकते हैं, तो उपयोग करें git-svnऔर कोई भी समझदार नहीं होगा।
मैथ्यू शारले

@ मैथ्यू: कैसे पृथ्वी पर git-svn के साथ आप इतिहास-संपादन-अक्षम svn repo में इतिहास को बदल सकते हैं?
gbjbaanb

2
@ जीबीजैनब: यदि आपने पहले ही एसवीएन सर्वर को धक्का दिया है तो यह नहीं होगा। लेकिन अगर आपने केवल स्थानीय रूप से कमिट किया है, तो आप अभी भी जिंदा रेपो में धकेलने से पहले प्रतिबद्ध संदेश को बदल सकते हैं।
मैथ्यू शारले

जवाबों:


15

SVN FAQ के अनुसार, यदि आप रिपॉजिटरी व्यवस्थापक ने इसे सक्षम किया है या यदि आपके पास रिपॉजिटरी में स्थानीय प्रशासनिक पहुंच है, तो आप कर सकते हैं

हालाँकि, ऐसा करना शायद एक बुरा विचार है। आप प्रभाव में हैं, इतिहास को बदल रहे हैं। संस्करण नियंत्रण के बिंदुओं में से एक परियोजना के लिए एक इतिहास और ऑडिट ट्रेल को बनाए रखना है। इतिहास में मनमाने ढंग से बदलाव करने के कारण ऑडिट ट्रेल को हराया। इसके बजाय, मैं आपको सलाह दूंगा कि आप छोटे-छोटे काम करें, संक्षिप्त लिखित संदेश दें और इन त्रुटियों को रोकने के लिए अपने व्यक्तिगत वर्कफ़्लो में सुधार करें।


4
@ मैथ्यू यहां तक ​​कि इतिहास में, किसी भी समय इतिहास को बदलना, मेरी राय में, एक भयानक विचार है। इतिहास को ऑडिट ट्रेल के रूप में काम करना चाहिए और किसी भी कारण से किसी भी समय किसी भी व्यक्ति को कभी भी नहीं बदलना चाहिए।
थॉमस ओवेन्स

2
तो कमिट मैसेज के लिए एक ऑडिट ट्रेल है, क्योंकि आमतौर पर कमिट मैसेज को बदलने का उद्देश्य प्रोजेक्ट के इतिहास का पालन करना आसान बनाता है।
पीटर टेलर

2
मान लीजिए कि मुझे पता है कि एक महीने पहले दर्ज किया गया एक भ्रामक संदेश भ्रामक, भ्रामक और बिल्कुल गलत है । क्या मुझे एक सही नोटेशन नहीं जोड़ा जा सकता है जो गलत संदेश देखने वाले सभी लोगों द्वारा देखा जाएगा? (मैं मानता हूं कि मूल संदेश आसानी से उपलब्ध नहीं होना चाहिए और परिवर्तन को स्वयं ट्रैक और टाइमस्टैम्प किया जाना चाहिए। लेकिन मैं असहमत हूं कि यह "बदलते इतिहास" का निर्माण करता है।)
डेविड श्वार्ट्ज

2
गलत जानकारी अस्वीकार्य है, इसलिए लोगों को उस जानकारी को सही या स्पष्ट करने की अनुमति नहीं दी जानी चाहिए, क्योंकि यह उनकी खराबी को छिपाएगा। वाह। बस वाह।
डेविड श्वार्ट्ज

3
आप ईमानदारी से एक स्व-पैरोडी की तरह दिखने लगते हैं। "इसे सही करना होगा, इसलिए इसे कभी भी सही नहीं किया जाना चाहिए।"
डेविड श्वार्ट्ज

5

ऐसा करने के लिए अनिवार्य रूप से आपके पास रिपॉजिटरी के लिए व्यवस्थापक अधिकार (प्रत्यक्ष या अप्रत्यक्ष रूप से) होना चाहिए। आप सभी उपयोगकर्ताओं को ऐसा करने की अनुमति देने के लिए या तो रिपॉजिटरी को कॉन्फ़िगर कर सकते हैं, या आप लॉग संदेश को सीधे सर्वर पर संशोधित कर सकते हैं।

यहां SVN FAQ देखें

प्रत्येक संशोधन में संलग्न गुणों के रूप में लॉग संदेश भंडार में रखे जाते हैं। डिफ़ॉल्ट रूप से, लॉग संदेश गुण (svn: log) को एक बार प्रतिबद्ध होने के बाद संपादित नहीं किया जा सकता है। ऐसा इसलिए है क्योंकि संशोधन गुणों में परिवर्तन (जिनमें से svn: log एक है) संपत्ति के पिछले मूल्य को स्थायी रूप से त्यागने का कारण बनता है, और सबवर्सन आपको गलती से ऐसा करने से रोकने की कोशिश करता है। हालाँकि, संशोधन संपत्ति को बदलने के लिए सबवर्सन प्राप्त करने के कुछ तरीके हैं।

पहला तरीका रिपॉजिटरी व्यवस्थापक के लिए पुनरीक्षण संपत्ति संशोधनों को सक्षम करने के लिए है। यह "प्री-रेवप्रॉप-चेंज" नामक एक हुक बनाने के द्वारा किया जाता है (इस अनुभाग को देखें कि यह कैसे करें के बारे में अधिक जानकारी के लिए तोड़फोड़ पुस्तक में देखें)। "प्री-रिवप्रॉप-चेंज" हुक को बदलने से पहले पुराने लॉग संदेश तक पहुंच है, इसलिए यह इसे किसी तरह से संरक्षित कर सकता है (उदाहरण के लिए, ईमेल भेजकर)। एक बार संशोधन संपत्ति संशोधन सक्षम हो जाने के बाद, आप svn propedit या svn propset - जैसे इन दोनों में से किसी एक में --revprop स्विच पास करके एक संशोधन का लॉग संदेश बदल सकते हैं:

$svn propedit -r N --revprop svn:log URL 
$svn propset -r N --revprop svn:log "new log message" URL 

जहाँ N वह संशोधन संख्या है जिसके लॉग संदेश को आप बदलना चाहते हैं, और URL रिपॉजिटरी का स्थान है। यदि आप इस आदेश को एक कार्यशील प्रतिलिपि के भीतर चलाते हैं, तो आप URL को छोड़ सकते हैं।

लॉग संदेश बदलने का दूसरा तरीका svnadmin setlog का उपयोग करना है। यह फाइलसिस्टम पर रिपॉजिटरी के स्थान का हवाला देकर किया जाना चाहिए। आप इस आदेश का उपयोग करके दूरस्थ रिपॉजिटरी को संशोधित नहीं कर सकते।

$ svnadmin setlog REPOS_PATH -r N FILE

जहाँ REPOS_PATH रिपॉजिटरी स्थान है, N वह संशोधन संख्या है जिसके लॉग संदेश को आप बदलना चाहते हैं, और FILE एक फ़ाइल है जिसमें नया लॉग संदेश है। यदि "प्री-रेवप्रॉप-चेंज" हुक जगह में नहीं है (या आप किसी कारण से हुक स्क्रिप्ट को बायपास करना चाहते हैं), तो आप --bypass-Hooks विकल्प का भी उपयोग कर सकते हैं। हालांकि, यदि आप इस विकल्प का उपयोग करने का निर्णय लेते हैं, तो बहुत सावधान रहें। आप परिवर्तन की ईमेल सूचनाओं, या बैकअप सिस्टम के बारे में ऐसी बातों को दरकिनार कर सकते हैं जो संशोधन गुणों का ट्रैक रखते हैं।

से उत्तर कामिल Kisiel के जवाब में स्टैक ओवरफ़्लो पर एक समान प्रश्न


जब आप स्टैकओवरफ़्लो से एक उत्तर पेस्ट करते हैं, तो आपको कम से कम इसे एक उद्धरण के रूप में चिह्नित करना चाहिए और ओपी (कामिल किसल इस मामले में) को श्रेय देना चाहिए। मूल से लिंक करें: stackoverflow.com/questions/304383/… कृपया अपना उत्तर संपादित करें या मैं आपको नीचा दिखाने जा रहा हूं।
फाल्कन

4

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

Git जैसी वितरित संस्करण नियंत्रण प्रणाली इस समस्या को कम करके यह सुनिश्चित करती है कि दूसरों को उपलब्ध जानकारी उपलब्ध कराने का कार्य परमाणु है और बिना किसी अतिरिक्त जानकारी के जैसे प्रतिबद्ध संदेश। लेकिन एक ही सिद्धांत यहां लागू होता है: आप स्थानीय रूप से उन चीजों को बदलने से हतोत्साहित होते हैं, जिन्हें आपने पहले ही दूसरों के लिए उपलब्ध कराया है।


वे प्रतिबद्ध संदेश के कई संस्करणों की अनुमति दे सकते थे ...
एलेक्स फीमिनमैन

1
@ l0b0 यह जानबूझकर बदतर नहीं है कि सूचना को प्रसारित करना जारी रखना गलत है, जो भ्रामक है, या नुकसान की संभावना है? रिकॉर्ड रखने के लिए खराब डेटा को सुनिश्चित करने की आवश्यकता नहीं होती है।
user179700

1
@ user179700: आप सही कह रहे हैं। मेरे द्वारा देखे गए सभी वीसीएस में एक मौलिक रूप से दोषपूर्ण डिजाइन धारणा है: एक कमिट में एक संदेश है, जो अपरिवर्तनीय है। जैसा कि एलेक्स कहते हैं, हमें "प्रतिबद्ध संदेश के कई संस्करणों की अनुमति देना चाहिए"।
l0b0

@ l0b0 मुझे यह सवाल दिलचस्प लग रहा है जितना अधिक मैं इस पर विचार करता हूं। मेरी पहली प्रतिक्रिया रेखाओं के साथ थी, बस और अधिक सावधानी से लिखें। वर्तमान अभ्यास प्रक्रिया में बाधा उत्पन्न करता है। मुझे आश्चर्य है कि अगर कोई अन्य प्रणाली अधिक मजबूत अभ्यास को लागू करती है। एक और सवाल के लिए समय। +1
user179700

@ user179700: मैं वर्तमान में एक स्क्रिप्ट लिखने की उम्मीद कर रहा हूं जो आपको एक प्रतिबद्ध संदेश बदलने की अनुमति देता है, लेकिन केवल एक (टाइमस्टैम्पड) अतिरिक्त स्ट्रिंग जोड़कर। ऑडिट ट्रेल को संरक्षित करते हुए आप गलतियों को सुधार सकते हैं।
17
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.