2009-08-17 7 views
43

मैंने कई ब्लॉग पोस्ट देखी हैं, और मेरे लिए अनुभव किया है, कि Mercurial एक रेपो से दूसरे में धक्का फ़ाइलों पर अनुमतियों को सुरक्षित नहीं करता है। क्या किसी को एक Mercurial एक्सटेंशन के बारे में पता है जो अनुमतियों को संरक्षित करेगा? मुझे लगता है कि यह एक हुक के साथ नहीं किया जा सकता है, क्योंकि एक हुक मूल रेपो में अनुमतियों के बारे में क्या जानता है?फ़ाइल अनुमतियों को संरक्षित करने के लिए Mercurial बनाया जा सकता है?

अनुरोधित विस्तार:

  • एक फाइल करने के लिए केवल परिवर्तन अनुमतियाँ (जैसे, chmod o+r filename), फ़ाइल के लिए प्रतिबद्ध के लिए एक संदेश कह रही है कि फ़ाइल नहीं बदला है के साथ विफल प्रयास करता है में एक परिवर्तन है।

  • अगर मैं अनुमतियाँ 600 (आरडब्ल्यू -------), तो रेपो क्लोन, क्लोन में एक ही फाइल अनुमति 664 (आरडब्ल्यू आरडब्ल्यू-r--) है के साथ एक फ़ाइल के लिए प्रतिबद्ध:

    : [email protected] 6522 ; hg clone one two 
    updating working directory 
    1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
    : [email protected] 6523 ; ls -l one two 
    one: 
    total 4 
    -rw------- 1 nr nr 8 Aug 18 21:50 foo 
    
    two: 
    total 4 
    -rw-rw-r-- 1 nr nr 8 Aug 18 21:51 foo 
    

इस उदाहरण से पता चलता है कि hg clone अनुमतियों की रक्षा नहीं करता, लेकिन hg push उन्हें या तो की रक्षा नहीं करता है।

अपने आवेदन में, एक रेपो एक सार्वजनिक रूप से पहुंच पथ पर है, और यह कि

  • से अधिक उपयोगकर्ता सार्वजनिक रेपो बन में रेपो

  • फ़ाइलें बदलने का अधिकार है प्रमुख महत्व है स्पष्ट रूप से पठनीय बनाते समय केवल पठनीय।

+0

क्या आप इस पर थोड़ा सा विस्तार कर सकते हैं? मैं अपनी स्थानीय फाइलों पर अनुमतियां बदल सकता हूं, परिवर्तन कर सकता हूं, उन्हें क्लोन पर धक्का दे सकता हूं, और क्लोन होगा, जब मैं इसे अपडेट करता हूं, तो अनुमतियां बदलें। कुंजी यह है कि मुझे दोनों प्रतिबद्ध और अद्यतन करना है। क्या आप धक्का से सिर्फ अनुमतियों को बदलने के लिए धक्का देना चाहते हैं? प्रतिबद्धता के बिना स्थानीय परिवर्तनों को नोटिस करने के लिए? सभी * मौजूदा * अनुमतियों का अनुमान लगाने के लिए? सटीक मुद्दा क्या है/मुझे क्या याद आ रही है? – quark

+0

@quark: यह कैसे किया जाता है? मैं डेबियन लिनक्स पर एचजी 1.2.1 का उपयोग कर रहा हूं और मैं यह भी स्वीकार नहीं कर सकता कि परमिसीनो में बदलाव एक बदलाव है। (एनबी मैंने आपके अनुरोध के अनुसार विस्तारित किया है।) –

+0

नॉर्मन: जो मैं याद कर रहा हूं उसे बदलता है यह तथ्य है कि आप "आर" और "डब्ल्यू" में बदलाव करना चाहते हैं, और मैं किस बारे में बात कर रहा हूं वह परिवर्तन है "एक्स" (जो Mercurial 0.6 के बाद से ट्रैक किया गया है) के लिए। मुझे एहसास होना चाहिए था कि आप पढ़ना/लिखना निष्पादन योग्य नहीं था। – quark

उत्तर

32

ऐसा लगता है कि यह हुक और एक सहायक उपकरण (और एक छोटे से च्युइंग गम और baling तार) का उपयोग किया जा सकता है:

  1. जाओ डेविड Hardeman के Metastore, जो बचत होती है और फ़ाइल मेटाडाटा पुनर्स्थापित करता है।

  2. स्रोतों को बदलें ताकि यह .hg निर्देशिका के साथ-साथ .git को अनदेखा कर दे।

  3. निम्नलिखित मर्क्युरियल हुक का उपयोग करें:

    precommit.meta = metastore -s 
    
    changegroup.update = hg update 
    update.meta = /usr/unsup/nr/bin/metastore -a 
    

आप रेपो को .metadata फ़ाइल जोड़ने के लिए है।

यह lashup समय के सबसे अधिक काम करेंगे, लेकिन अगर आप केवल अनुमतियों को बदलने और यह प्रचार करने के लिए चाहते हैं, आप आदेश .metadata फाइल में उन परिवर्तनों को पुश करने के लिए जहां एचजी देखेंगे में metastore -s चलाना होगा परिवर्तन; अन्यथा प्रतिबद्ध सोचता है कि कुछ भी नया नहीं है।

+0

डेविड हार्डमैन का लिंक अप्रचलित है। नया लिंक: https://github.com/przemoc/metastore.git – Speakus

+0

बीटीडब्ल्यू। यहां: http://stackoverflow.com/a/17583212/751932 का एक और टूल git-cache-meta.sh का उल्लेख किया गया था https://gist.github.com/Cojad/9205547 – Speakus

-1

वीसीएस में अनुमतियां स्टोर करना अच्छा नहीं है। हालांकि, Mercurial "निष्पादन योग्य" ध्वज का समर्थन करता है (जो अनुमतियों के समान नहीं है, हालांकि यूनिक्स निष्पादन योग्य ध्वज अनुमतियों का हिस्सा है)।

+3

यह सामान्य रूप से एक अच्छा विचार नहीं हो सकता है, लेकिन मेरे आवेदन में, अनुमतियां महत्वपूर्ण मेटाडेटा हैं, और उन्हें सही होना चाहिए। डीवीसीएस आदर्श उपकरण नहीं है लेकिन सबसे अच्छा लगता है। –

16

क्या Mercurial FAQ से इस समाधान का उपयोग के बारे में:

आप config फ़ाइल प्रबंधन के लिए मर्क्युरियल का उपयोग कर रहे हैं, तो आप ट्रैक फ़ाइल गुण (स्वामित्व और अनुमतियाँ) भी कर सकते हैं। Mercurial केवल प्रत्येक फ़ाइल के निष्पादन योग्य बिट को ट्रैक करता है।

यहाँ कैसे फ़ाइलों के साथ गुण को बचाने के लिए का एक उदाहरण (लिनक्स पर काम करता है अगर आप एसीएल पैकेज स्थापित है) है:

# cd /etc && getfacl -R . >/tmp/acl.$$ && mv /tmp/acl.$$ .acl 
# hg commit 

यह एकदम सही से दूर है, लेकिन आप विचार समझ गये। अधिक परिष्कृत समाधान के लिए, एटकीपर देखें।

1

/etc निर्देशिका के विशिष्ट मामले के लिए, etckeeper दिलचस्प लग रहा है।

संबंधित मुद्दे

 संबंधित मुद्दे