2009-11-02 19 views
39

मेरे पास कुछ गिट भंडार एसएसएच के माध्यम से दूरस्थ रूप से पहुंचे हैं और मैं उनमें से कुछ को केवल धक्का देने के लिए केवल पढ़ने के लिए बनाना चाहता हूं। कुछ लोगों को इन भंडारों को इंगित करने वाले रिमोट हैं।एक गिट रिपोजिटरी को केवल पढ़ने के लिए कैसे?

ये नंगे भंडार --shared=group शुरू किए गए थे, इसलिए एसएसएच एक्सेस की अनुमति देने के लिए पर्याप्त सभी फ़ाइलों के लिए 660 पर फ़ाइल अनुमतियां सेट कर रही हैं, लेकिन लिखने की अनुमति नहीं है? या क्या कोई आसान तरीका है?

चीयर्स।

उत्तर

39

यह करने के लिए एक से अधिक संभव तरीका नहीं है।

  • यदि आपके उपयोगकर्ताओं को एक एक खोल खाता (शायद सीमित) है, और उन्हें अपने स्वयं के खाते के माध्यम से Git संग्रह तक पहुँचने के प्रत्येक, आप Git संग्रह करने के लिए SSH का उपयोग को नियंत्रित करने के फाइल सिस्टम अनुमतियाँ उपयोग कर सकते हैं। यूनिक्स पर वे निर्देशिका पर समूह लिखने और समूह के लिए विशिष्ट अनुमतियों ("चिपचिपा समूह आईडी" सेट के साथ) की अनुमति के साथ लिखने की अनुमति होगी।

  • धकेल git-receive-pack की आवश्यकता है उपयोगकर्ता की $ पथ में हो, और उनके लिए निष्पादन योग्य होने के लिए ... हालांकि मुझे यकीन है कि नहीं कैसे संभव इस दृष्टिकोण होगा हूँ।

  • आप update या pre-receive हुक का उपयोग Git स्रोतों में contrib/hooks से update-paranoid उदाहरण हुक का उपयोग कर उदाहरण के लिए, भंडार के लिए उपयोग नियंत्रण करने के लिए कर सकते हैं।

  • उपयोगकर्ताओं की बड़ी संख्या के साथ आप Git संग्रह, Gitosis की तरह करने के लिए उपयोग का प्रबंधन करने के (पायथन में, setuptools की आवश्यकता है) या Gitolite (पर्ल में) एक उपकरण का उपयोग कर के साथ बेहतर हो सकता है।

  • के लिए केवल पढ़ने के लिए का उपयोग आप सेटअप git daemon केवल पढ़ने के लिए गुमनाम (और अप्रमाणित) git:// प्रोटोकॉल के माध्यम से SSH प्रोटोकॉल के माध्यम से पहुंच का उपयोग, के बजाय प्रदान करने के लिए कर सकते हैं।

    एसएसएच से जीआईटी प्रोटोकॉल में संक्रमण को कम करने के लिए url.<base>.insteadOf कॉन्फ़िगरेशन चर के लिए प्रलेखन देखें।


भी देखें अध्याय 4. "Git on the Server" स्कॉट चैकोन द्वारा Pro Git पुस्तक के (CC-BY-NC-SA लाइसेंस)।

+2

ध्यान दें कि फाइल सिस्टम अनुमतियों के लिए, आप पैट नोटज़ द्वारा सुझाए गए chmod का उपयोग कर सकते हैं। –

+8

विचारों के लिए धन्यवाद (हर कोई)। अपडेट-पैरानोइड उदाहरण हुक से प्रेरित, अब मेरे पास मेरे रिपोज़ में एक हुक है जो सभी धक्काओं के लिए बंद 'गूंज' करता है "; बाहर निकलें 1' –

+1

@ स्टेवफॉली अगर आपकी टिप्पणी एक उत्तर थी, तो मैं स्वीकार्य उत्तर के बजाय इसके लिए वोट दूंगा। आपका बिंदु छोटा है, और काम करता है। –

3

चूंकि गिट मुख्य रूप से एक्सेस नियंत्रण के लिए फाइल सिस्टम पर निर्भर करता है, जो काम करेगा। ध्यान दें कि आपकी अनुमतियों में, दुनिया के पास फ़ाइल तक कोई पहुंच नहीं है, लेकिन उपयोगकर्ता और समूह ने पढ़ने/लिखने का उपयोग किया है। यदि आप विश्व-पठनीय चाहते हैं, तो आपकी अनुमति 0444 होनी चाहिए।

आप रेपो अनुमतियों को 0664 के रूप में सेट करके और अधिक बढ़िया नियंत्रण कर सकते हैं जहां उपयोगकर्ता nobody है और समूह gitdevs जैसा कुछ है। फिर, gitdevs समूह में केवल लोगों को रेपो को लिखने की क्षमता होगी, लेकिन दुनिया इससे पढ़ सकती है।

फ़ॉलो-अपHere is a link कि आपके रेपो का हिस्सा और कवर समर्थक के & विपक्ष और अभिगम नियंत्रण सुविधाओं आने के लिए विभिन्न तरीकों को शामिल किया गया।

+0

666 विश्व पठनीय और लिखने योग्य फाइलें हैं। 776 दुनिया और समूह पठनीय, लिखने योग्य और निष्पादन योग्य और अन्य उपयोगकर्ता पढ़ते हैं और लिखते हैं। सुनिश्चित नहीं है कि आपको उन नंबरों को कहां मिला है जहां आप अनुशंसा कर रहे हैं, लेकिन वे आम तौर पर खतरनाक हैं। – Dustin

+0

धन्यवाद, मेरे उत्तर को सही किया। बहुत ज्यादा टाइपिंग, पर्याप्त सोच नहीं। – jheddings

0

एक और संभावना गिट प्रोटोकॉल है, लेकिन इसके लिए गिट डिमन चलाना आवश्यक है।

1

यदि आपको एक्सेस कंट्रोल की भी आवश्यकता है, तो gitosis देखें। सेट अप करना बहुत आसान है और आप यह नियंत्रित करने के लिए एक सरल स्क्रिप्ट का उपयोग कर सकते हैं कि कौन कर सकता है।

+1

या गिटोलाइट: http://github.com/sitaramc/gitolite –

9
chmod -R a-w /path/to/repo.git 
+0

"उनमें से कुछ को केवल अधिक धक्का रोकने के लिए केवल पढ़ने के लिए" - यह खींचने से रोक देगा, है ना? – user3175580

7

pre-receive हुक जो केवल एक सूचनात्मक संदेश प्रिंट करता है और शून्य स्थिति के साथ बाहर निकलता है, वह काम करता है।

मान लिया जाये कि आप अपने संदेश में कुछ सार्थक जानकारी डाल, यह भी कारण है कि वे धक्का नहीं कर सकते हैं पूछ निराश उपयोगकर्ताओं से प्रश्नों पर कटौती:

#!/bin/bash 
echo "==================================================" 
echo "This repository is no longer available for pushes." 
echo "Please visit blah blah yadda yadda ...." 
echo "==================================================" 
exit 1 
0

हाल ही में मैं पथ के लिए "/ रेपो पहुंच को सीमित करने के लिए इस्तेमाल किया। गिट/गिट-प्राप्त-पैक "को प्राप्त करने के परिणामस्वरूप कि कुछ उपयोगकर्ताओं के लिए भंडार पढ़ा जाता है और केवल कुछ अन्य लोगों के लिए पढ़ा जाता है। Httpd कॉन्फ़िगरेशन में ऐसा लगता है:

<Location /repo.git/> 
      Require group developers developers-ro 
    </Location> 

    <Location /repo.git/git-receive-pack> 
      Require group developers 
    </Location> 
संबंधित मुद्दे