2009-08-28 10 views
12

मैं एक छोटी परियोजना का प्रबंधन करने के लिए गिट का उपयोग कर रहा हूं। मैं एसएसएच के माध्यम से अपने सभी लेन-देन (क्लोन, पुश, पुल इत्यादि) कर रहा हूं, लेकिन हाल ही में गिट-अपडेट-सर्वर-जानकारी चलाया क्योंकि मैं http पर चल रहे गिट-क्लोन के साथ प्रयोग करना चाहता था। यह बहुत अच्छा काम किया। ठंडा। अब मुझे एहसास है कि कोई भी बिना किसी प्रमाण-पत्र के http पर मेरे भंडार को क्लोन कर सकता है। मैं गिटोसिस के माध्यम से http प्रमाणीकरण स्थापित करने के बारे में बेहद जागरूक हूं, लेकिन वास्तव में यह नहीं है कि मैं क्या चाहता हूं। मैं पूरी तरह से http क्लोनिंग को अक्षम करना पसंद करूंगा।क्या मैं http पर गिट-क्लोन को "अक्षम" कर सकता हूं?

क्या कोई तरीका है कि मैं केवल एसआईएस पर लेनदेन की अनुमति देने के लिए गिट बता सकता हूं? या जब मैंने पहली बार http पर क्लोनिंग सक्षम करने के लिए गिट-अपडेट-सर्वर-जानकारी चलाई तो मैंने क्या किया है?

+0

गिट 2.12 (क्यू 1 2017) के साथ, आपके पास 'गिट कॉन्फ़िगर प्रोटोकॉल होगा। .allow ... '। [नीचे मेरा जवाब] देखें (http://stackoverflow.com/a/41369667/6309) – VonC

उत्तर

14

Git भंडार HTTP परिवहन के माध्यम से उपलब्ध होने के लिए, यह करने के लिए (किसी भी) वेब सर्वर द्वारा "निर्यात" किया जा जरूरत है। यदि आपका भंडार (.git निर्देशिका अधिक सटीक होने के लिए) किसी वेब ब्राउज़र में बाहर से दिखाई देता है, तो इसे HTTP प्रोटोकॉल के माध्यम से गुमनाम रूप से क्लोन किया जा सकता है या प्राप्त किया जा सकता है। git update-server-info क्लोन (या fetch) के लिए अतिरिक्त सहायक सहायक जानकारी (.git/objects/info/packs और .git/info/refs) उत्पन्न करने के लिए उपयोग किया जाता है, यह जानने के लिए कि क्या उपलब्ध है।

तो तुम क्या करने की जरूरत है या तो अनुमतियां बदलने द्वारा उन दो फ़ाइलें (.git/objects/info/packs और .git/info/refs) हटाने, या बस इसे तो अपने भंडार वेब के माध्यम से उपलब्ध नहीं है बनाने के लिए, शायद इस तरह से है कि उपयोगकर्ता जो वेब सर्वर चलाता है (आमतौर पर 'कोई नहीं' या 'www', या 'apache') .git भंडार तक पहुंच नहीं है। या वेब सर्वर कॉन्फ़िगर करें ताकि यह आपके संग्रह को निर्यात (दृश्यमान) न करे।

HTTP प्रोटोकॉल (वर्तमान में) तथाकथित "गूंगा" प्रोटोकॉल है, जिसका अर्थ यह है कि यह फाइलों की सेवा करता है, और इस नियंत्रण में आपके द्वारा उपयोग किए जाने वाले वेब सर्वर द्वारा (डंब] सर्वर द्वारा एक्सेस नियंत्रण किया जाता है (या फाइल सिस्टम द्वारा)।

मुझे लगता है कि आपकी रिपॉजिटरी वेब सर्वर द्वारा निर्यात नहीं की जाती है, इसलिए आपके पास चिंता करने की कोई बात नहीं है: आपकी रिपॉजिटरी HTTP के माध्यम से उपलब्ध नहीं है।

ध्यान दें कि यह उद्धरण केवल भंडार के लिए लिख यानी धक्का (कम से कम खुला स्रोत परियोजनाओं के लिए)

+0

मेरा .git/ऑब्जेक्ट/जानकारी निर्देशिका पहले से खाली है और मुझे अभी भी एक ही समस्या है। –

1

हटाएं .git/objects/info/packs और .git/info/refs

+0

मेरा .git/ऑब्जेक्ट/जानकारी निर्देशिका पहले से खाली है और मुझे अभी भी एक ही समस्या है। –

2

के लिए Git संग्रह गुमनाम अप्रमाणित केवल पढ़ने के लिए उपयोग किया है, और प्रमाणीकरण की आवश्यकता के लिए सामान्य है क्या कोई जिस तरह से मैं केवल एसआईएस पर लेनदेन की अनुमति देने के लिए गिट बता सकता हूं?

6 8 को साल बाद में, Git 2.12 (क्यू 1 2017) की अनुमति देने या Git द्वारा इस्तेमाल किया एक प्रोटोकॉल को अक्षम करने के विन्यास का प्रस्ताव देगा।

git config protocol.http.allow never 
git config protocol.https.allow never 
git config protocol.git.allow never 
git config protocol.file.allow never 

git config protocol.ssh.allow always 

Jeff King (peff) द्वारा commit abcbdc0 (14 दिसंबर 2016) देखें।
commit a768a02, commit aeae4db, commit f1762d7, commit f962ddf, commit 85e4205 (14 दिसंबर 2016) Brandon Williams (mbrandonw) द्वारा देखें।
(commit 9d540e9 में Junio C Hamano -- gitster -- द्वारा विलय, 27 दिसंबर 2016)

यह वही प्रोटोकॉल क्लोन/लाने/धक्का दौरान परिवहन के लिए अनुमति दी जाती है की एक महीन कुशल नियंत्रण के लिए अनुमति देता है एक नया विन्यास तंत्र के माध्यम से सक्षम किया गया है।

git config अब शामिल हैं:

protocol.allow 

तो सेट, सभी प्रोटोकॉल जो स्पष्ट रूप से एक नीति (protocol.<name>.allow) की जरूरत नहीं है के लिए एक उपयोगकर्ता परिभाषित डिफ़ॉल्ट नीति प्रदान करते हैं।
डिफ़ॉल्ट रूप से, अगर सेट नहीं,

  • में जाना जाता है-सुरक्षित प्रोटोकॉल (http, https, Git, ssh, फ़ाइल) always की एक डिफ़ॉल्ट नीति,
  • में जाना जाता है-खतरनाक प्रोटोकॉल (ext) है एक डिफ़ॉल्ट नीति है never, और
  • अन्य सभी प्रोटोकॉल में user की डिफ़ॉल्ट नीति है।

समर्थित नीतियों:

  • always - प्रोटोकॉल हमेशा सक्षम है प्रयोग की जाने वाली।
  • never - प्रोटोकॉल का उपयोग करने में कभी भी सक्षम नहीं है।
  • user - प्रोटोकॉल केवल जब GIT_PROTOCOL_FROM_USER या तो सेट नहीं होने पर या 1.
    यह नीति है जब आप एक प्रोटोकॉल सीधे उपयोगकर्ता द्वारा प्रयोग करने योग्य होने के लिए चाहते इस्तेमाल किया जाना चाहिए की एक मूल्य है इस्तेमाल किया जा करने में सक्षम है, लेकिन यह प्रयोग किया जाता है नहीं करना चाहती कमांड द्वारा जो उपयोगकर्ता इनपुट के बिना क्लोन/फ़ेच/पुश कमांड निष्पादित करते हैं, उदाहरण के लिए रिकर्सिव सबमिशन प्रारंभिकरण।
+0

मैं जवाब नहीं बदलूंगा, लेकिन मैं आपको यह जानकारी जोड़ने की सराहना करता हूं! जानकार अच्छा लगा। –

+0

@ जॉर्ज मॉन्डीस कोई समस्या नहीं है। इसे अभी तक जारी नहीं किया गया है। – VonC

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