2008-10-26 10 views
5

में केस-असंवेदनशील फ़ाइल नाम हैंडलिंग मैं Vista64 पर TortoiseHg 0.5 (जिसमें Mercurial 1.0.2 शामिल है) का उपयोग कर रहा हूं। Mercurial Book से मेरी समझ यह है कि Mercurial को केस-असंवेदनशील फाइल सिस्टम (जैसे कि एनटीएफएस, जो मैं हूं) पर केस-असंवेदनशील तरीके से फ़ाइल नामों को संभालना चाहिए। हालांकि मुझे लगता है कि मर्क्युरियल की मेरी स्थापना मामले के प्रति संवेदनशील वास्तव में है:Mercurial

>hg status -A foo 
C foo 
>hg status -A FOO 
? FOO 

इस मर्क्युरियल में एक बग, मर्क्युरियल की TortoiseHg निर्माण में एक बग हो सकता है, या यह कुछ और है? मैं विंडोज़ पर Mercurial से केस-असंवेदनशील फ़ाइल नाम हैंडलिंग कैसे प्राप्त कर सकता हूं?

उत्तर

10

यह समस्या मर्क्युरियल 1.1 में हल किया गया है! release notes से: "फाइलफॉर्म्स केसफॉल्डिंग के चेहरे में बेहतर शुद्धता"।

Windows पर, मर्क्युरियल अब अपने आदेश पंक्ति तर्क में मामले पर ध्यान नहीं देता:

>hg status -A foo 
C foo 
>hg status -A FOO 
C foo 

और यह भी पता है कि फ़ाइल नाम परिवर्तन है कि केवल मामले शामिल नई फ़ाइलें नहीं हैं:

>ren foo FOO 
>hg status -A fOO 
C foo 

इस प्रकार है कमांड लाइन पर गलत टाइपों के कारण परिवर्तनों को नजरअंदाज करने का कोई जोखिम नहीं है।

हालांकि, ध्यान रखें कि .hgignore फ़ाइल की सामग्री केस संवेदनशील होती है। यह केवल एक मुद्दा है यदि आप ग्लोब सिंटैक्स का उपयोग कर रहे हैं; regexp वाक्यविन्यास के साथ आप पैटर्न की शुरुआत में उन्हें असंवेदनशील बनाने के लिए (? i) डाल सकते हैं।

7

मुझे लगता है कि आप hgbook को गलत तरीके से पढ़ते हैं। धारा 7.7 का परिचय सिर्फ ओएस में मौजूद तीन अलग-अलग प्रकार की केस संवेदनशीलता का वर्णन कर रहा है, यह नहीं कह रहा कि मर्कुरियल उन अर्थशास्त्रों को दर्पण करेगा।

खंड 7.7.2 में 'मामले संघर्षों का पता लगा रहा' बाद में यह कहते हैं:

जब काम कर निर्देशिका में सक्रिय, मर्क्युरियल फाइल सिस्टम जहां कार्यशील निर्देशिका स्थित है नामकरण नीति सम्मान करता है। यदि फाइल सिस्टम केस संरक्षित है, लेकिन असंवेदनशील है, Mercurial नामों का इलाज करेगा जो के समान ही भिन्न होंगे।

जब आप ऐसा करेंगे hg status -A FOO प्रक्रिया है कि तेज भीतर क्या हो रहा है यह है:

  1. जांच करें कि एक फ़ाइल, फ़ाइल तर्क मिलान फाइल सिस्टम, 'FOO' पर मौजूद है - और इस बिंदु पर यह किया जा रहा है मामला असंवेदनशील है इसलिए यह 'foo' पाता है और कहता है "yup, मुझे एक फाइल मिली है"
  2. जांचें कि फ़ाइल तर्क, 'FOO' से मेल खाने वाले फ़ाइल मेनिफेस्ट में कोई प्रविष्टि है या नहीं, इसलिए स्थिति शो ए '?' यह कह रहा है कि एचजी

ट्रैक न बेहतर NTFS पर मामले के बारे में देखभाल नहीं तेज देखने के लिए डिस्क पर एक फ़ाइल के लिए निम्न चरणों का प्रयास करें:

  1. एचजी init
  2. गूंज लाइन> फू
  3. एचजी जोड़ने फू
  4. एचजी -m प्रतिबद्ध 'प्रतिबद्ध फू'
  5. कदम फू नहीं-foo
  6. कदम नहीं-foo fOO
  7. एचजी स्थिति

और आप एचजी कह रही है कि कुछ भी नहीं बदला गया है, क्योंकि केवल एक चीज बदल गया है कि मामले में जो एचजी आप के लिए अनदेखी कर रहा है देखना चाहिए।

जब मैं लिनक्स पर एक ही बात कर रहा बजाय देखें:

! Foo 
? FOO