मरकरी रिपॉजिटरी करप्शन


14

यह कुछ हद तक इस सवाल से संबंधित है लेकिन एक अलग सवाल है।

हमारे पास एक केंद्रीय एचजी रिपॉजिटरी है, जो एसएसएच और मर्क्यूरियल-सर्वर के माध्यम से उपयोगकर्ताओं को दी जाती है । हमारे पास कई मैक, लिनक्स और विंडोज क्लाइंट हैं जो इसे कनेक्ट कर रहे हैं।

यह अब दो बार हुआ है कि विंडोज उपयोगकर्ताओं में से एक ने अपनी रिपॉजिटरी को दूषित कर दिया है, फिर इसे एक भ्रष्ट करने वाले केंद्र पर वापस धकेल दिया। मैं केंद्रीय भंडार पर एक आने वाली हुक स्क्रिप्ट लिखना चाहता हूं ताकि लेनदेन को स्वीकार किया जा सके अगर यह केंद्रीय रेपो को भ्रष्ट करेगा।

हालांकि दुर्भाग्य से मुझे ऐसी स्क्रिप्ट लिखने के लिए मर्क्यूरियल के बारे में पर्याप्त जानकारी नहीं है। किसी भी संभावना है कि कोई और इस पार आया है? व्यक्तिगत रूप से मुझे पूरा यकीन नहीं है कि hg डिफ़ॉल्ट रूप से ऐसा क्यों नहीं करता है।


मुझे यहाँ एक समाधान मिला है: davidherron.com/blog/topics/… जो सभी क्लाइंट्स को करने की आवश्यकता होगी। लेकिन अगर किसी के पास एक बेहतर समाधान है जो केंद्रीय रेपो के लिए खुद कर सकता है जो बेहतर होगा।
बोबिनबॉटले

कृपया हमें अधिक जानकारी दें: आप सर्वर पर और प्रत्येक क्लाइंट पर Mercurial के किस संस्करण का उपयोग कर रहे हैं?
मार्टिन गीस्लर

2
इसके अलावा, यह हमारे (मर्क्यूरियल डेवलपर्स) के लिए बेहद उपयोगी होगा यदि आप इसे पुन: पेश कर सकें। कृपया हमारी मेलिंगलिस्ट के माध्यम से सीधे हमें ऐसे मुद्दों की सूचना दें: mercurial.selenic.com/wiki/MailingLists या बग ट्रैकर: selenic.com/mercurial/bts जो यहां पोस्ट करने की तुलना में बहुत अधिक उत्पादक है :-)
मार्टिन गीस्लेर

जवाबों:


4

मर्क्यूरियल के हाल के संस्करण (1.5 के बाद से) आने वाले डेटा के सत्यापन का समर्थन करते हैं। जोड़ना

[server]
validate = True

आपके सर्वर के .hg/hgrcआने वाले डेटा को सत्यापित करने और अमान्य पुशों को अस्वीकार करने के लिए आपके सर्वर के hg कॉन्फिगरेशन (या तो hgwebdir कॉन्फिगर ठीक काम करना चाहिए)। ग्राहक को तब एक त्रुटि दिखाई देगी:

remote: abort: missing file data for beta:dddc47b3ba30e54484720ce0f4f768a0f4b6efb9 - run hg verify

उम्मीद है की वो मदद करदे!


2

हो सकता है कि आप भंडार को पूरी तरह धकेलने से बचें। मर्क्यूरियल और उसके वितरित प्रकृति के साथ, हर कोई अपनी शाखा रख सकता है, और जब उन्हें लगता है कि वे तैयार हैं, तो वे आपको बताते हैं और आप उनसे खींचते हैं। कोई कमिटमेंट-एक्सेस की समस्या, कोई धक्का नहीं जो सामान तोड़ देगा ...

यह कम से कम एक सलाह है कि मेरे एक दोस्त ने मुझे दिया है, जब मैं SVN से Mercurial की ओर पलायन कर रहा था।

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


HG को धक्का नहीं इसके पूरा उद्देश्य धरा - एक से अधिक उपयोगकर्ता एक साथ काम
Anonymouse

0

क्या आप डेविड हेरॉन के ब्लॉग की तरह ही काम नहीं कर सकते थे , लेकिन इसे प्री-आउट करने पर करने के बजाय, केंद्रीय रेपो पर प्रीकोमिट हुक पर करें?


नहींं :-( मैंने कोशिश की है लेकिन यह एक गतिरोध में समाप्त होता है। जब कोई ग्राहक इसे धकेलने का प्रयास करता है तो भंडार पर ताला लगा देता है। 'hg सत्यापित' चलाने के लिए भी एक ताला की आवश्यकता होती है, इसलिए यह हमेशा के लिए प्रतीक्षा में समाप्त होता है। एक अंतहीन लूप।
बॉबिनबोटल

इसके अलावा, यहां तक ​​कि अगर यह प्री-कॉम्पट पर काम करता है, तो यह रिपॉजिटरी को सत्यापित करेगा, देखें कि यह ठीक है, फिर उन परिवर्तनों को प्रतिबद्ध करें जो इसे भ्रष्ट करेंगे। वास्तव में मुझे यह आकलन करने के लिए एक हुक की आवश्यकता होगी कि क्या आने वाले बदलाव रेपो को दूषित करेंगे, यदि ऐसा है तो लेन-देन वापस करें। तो यह परिवर्तन समूह हुक पर होने के लिए और अधिक समझ में आता है।
बोबिनबॉटले

(चेंजग्रुप हुक का उपयोग करके अभी भी गतिरोध
उत्पन्न होता है

दिलचस्प है - हुक अजगर आधारित लग रहे हैं। क्या आप जानते हैं कि रिपॉजिटरी को भ्रष्ट करना क्या है? क्या हर बार एक ही चीज होती है?
रयान गिबन्स

0

एक संभावित विकल्प यह है:

  1. पुश के बाद रिपॉजिटरी को क्लोन करें।
  2. इसे सत्यापित करें।
  3. यदि रेस्पिरेटरी अच्छी है, तो उसे नवीनतम अच्छे के रूप में संग्रहित करें
  4. यदि रेस्पिरेटरी दूषित है, तो अलार्म बढ़ाएं
  5. अलार्म पर, अंतिम ज्ञात अच्छे रिस्पांसिटरी को पुनर्स्थापित करें।

यह समाधान वह नहीं है जिसकी आपको आवश्यकता थी, लेकिन कम से कम, आपको भ्रष्टाचार के मामले में अपनी रिपॉजिटरी को रोलबैक करने का एक तरीका मिलता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.