2010-12-10 13 views
13

मैं अन्य टीम-सदस्यों को मास्टर-शाखा पर काम करने के लिए मजबूर करना चाहता हूं लेकिन विकास शाखा पर काम नहीं करना चाहता हूं। हमारे पास एक केंद्रीय गिट-रिपोजिटरी है जहां हम अपना काम धक्का देते हैं। मैं जानना चाहता हूं कि उपयोगकर्ताओं को मास्टर-शाखा में परिवर्तनों को धक्का देने से रोकना संभव है, लेकिन केवल कुछ उपयोगकर्ताओं को ऐसा करने की अनुमति है।गिट - कुछ उपयोगकर्ताओं के लिए लॉकिंग मास्टर शाखा?

मैं निम्नलिखित "कार्यप्रवाह"

  • विकास हमेशा केवल एक विकास शाखा
  • रिहाई-प्रबंधक मास्टर शाखा के लिए जिम्मेदार है और केवल वह विलय करने के लिए अनुमति दी है के साथ किया जाता है चाहते हैं एक विकास शाखा से मास्टर में सामान और इसे केंद्रीय भंडार पर मास्टर शाखा में धक्का दें।

क्या यह संभव है और मैं इसे कैसे प्राप्त कर सकता हूं?

+0

एक्सेस नियंत्रण सर्वर से चल रहे ऑपरेटिंग सिस्टम पर गिट से आउटसोर्स किया जाता है। यदि आप अपना स्वयं का सर्वर चला रहे हैं, तो मैं गिटोसिस स्थापित करने की अनुशंसा करता हूं: http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way – blueberryfields

+0

धन्यवाद, मुझे गिटोसिस पर एक नज़र डालेंगे ... – aurora

+0

मैंने सोचा कि यह ठीक है क्योंकि 'गिट' वितरित किया गया है, आपको अनुमतियों को नियंत्रित करने की आवश्यकता नहीं है क्योंकि कोई' साझा 'भंडार मौजूद नहीं है? दूसरे शब्दों में, परियोजना पर काम कर रहे किसी भी टीम के सदस्य रिपोजिटरी की अपनी प्रतिलिपि पर काम करेंगे, और यह रखरखावकर्ता है जो शाखाओं को 'मास्टर' रिपोजिटरी में विलीन करता है (केवल इसके लिए एक नाम, मास्टर शाखा के साथ भ्रमित नहीं होना चाहिए।) – amn

उत्तर

6

man githooks देखें: साझा रेपो में, आप $(git rev-parse --git-dir)/hooks/pre-receive या $(git rev-parse --git-dir)/hooks/update स्क्रिप्ट बना सकते हैं जो सत्यापित करता है कि आपके उपयोगकर्ता किस रेफरी को दबाए रखने की कोशिश कर रहे हैं। गिट update-paranoid उदाहरण हुक लागू करने वाले प्रति-एसीएल के साथ आता है।

+0

धन्यवाद ... githooks बहुत शक्तिशाली प्रतीत होता है। मैं दोनों गिटोसिस और githooks पर एक नज़र डालेंगे – aurora

+0

क्या कोई इस पर विस्तार कर सकता है? मैंने '[अपडेट-पैरानोइड] (http://git.kernel.org/cgit/git/git.git/tree/contrib/hooks/update-paranoid?id=HEAD) 'हुक देखा, लेकिन मैं देख रहा हूं यकीन नहीं है कि मैं समझता हूं कि एसीएल कई उपयोगकर्ताओं के लिए कैसा दिखता है। क्या यह अपेक्षा की जाती है कि उपयोगकर्ता के पास फॉर्म में अनुमत कमेटरों के लिए एकाधिक प्रविष्टियां होंगी: 'committer = John Doe <[email protected]>', और इसका उपयोग एन उपयोगकर्ताओं के लिए किया जा सकता है: ' कमिटर = जॉन डो < [email protected]> कमिटर = उपयोगकर्ता 2 <[email protected]> कमिटर = उपयोगकर्ता 3 <[email protected]> ' ? – blong

+0

@ b.long: 'अपडेट-पैरानोइड ''/vcs/acls के भीतर एक' उपयोगकर्ता/$ {USER} .acl' की अपेक्षा करता है।प्रत्येक एसएसएच लॉगिन के लिए गिट' रेपो (नहीं * यह * रेपो); प्रत्येक के भीतर, वांछित के रूप में कई 'committer = 'लाइनें हो सकती हैं। लेकिन आप शायद अपने स्वयं के उपयोग के लिए स्क्रिप्ट को संशोधित या फिर से लिखना चाहते हैं। – ephemient

1

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

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

+0

धन्यवाद। मैंने एसएसएच के बारे में सोचा, और यह सेटअप करना काफी आसान होगा। लेकिन मैंने सोचा कि 'बेहतर' तरीके होना चाहिए ...? – aurora

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