2012-01-08 12 views
63

मैं अपने Git भंडार है, जो GitHub का उपयोग कर किया जाता है में चार शाखाएं हैं केवल एक ही शाखा ([व्यक्ति का नाम] - विकास) तक पहुंच पहुंच प्रतिबंधित करने का तरीका? यह मैं कैसे करूंगा?गिट शाखा पहुंच को प्रतिबंधित करने का एक तरीका?</p> <ul> <li>उत्पादन</li> <li>मचान</li> <li>मास्टर</li> <li>[व्यक्ति का नाम] के लिए विकास</li> </ul> <p>है वहाँ एक:

संदर्भ के लिए, एक समान प्रश्न: How to write a git hook to restrict writing to branch?

+0

मैं जानता हूँ कि इस सवाल पुराना है। लेकिन https://help.github.com/articles/about-branch-restrictions/ –

उत्तर

44

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

यदि अपने स्वयं के गिट सर्वर का उपयोग करते हैं, तो उपयोगकर्ताओं को गलत शाखाओं को धक्का देने से रोकने के लिए हुक का उपयोग करना संभव होना चाहिए।

+0

पर एक नज़र डालें, हुक का उपयोग करने के बारे में जानकारी के लिए, http://stackoverflow.com/questions/4114417/how-to-write- ए-गिट-हुक-टू-प्रतिबंधित-लेखन-टू-शाखा शायद कोई अच्छा विचार नहीं है? –

0

व्यावहारिक रूप से नहीं। गिट शाखाएं वास्तव में एक-दूसरे से अलग नहीं होती हैं जिससे आप शायद सोच रहे हों कि वे हैं।

आप शायद यहां क्या करना चाहते हैं प्रत्येक उपयोगकर्ता की विकास शाखा के लिए एक अलग भंडार का उपयोग करें।

7

Esko ओपन-सोर्स प्रोजेक्ट्स के लिए उपयुक्त उत्कृष्ट समाधान सुझाया गया। हालांकि यह आवश्यक है कि एक सहयोगी टीम के प्रत्येक सदस्य के पास गिटहब पर एक भुगतान खाता है, जो हमेशा सत्य नहीं होता है।

VonC ने बताया कि एक और समाधान है जिसमें केवल एक भुगतान गिटहब खाता शामिल है। और मैं कुछ ट्यूटोरियल प्रदान करने जा रहा हूं कि वोनसी के समाधान को कैसे कार्यान्वित किया जाए।

मान लीजिए कि हमारे पास दो निजी भंडार हैं: test-test और test-production। पहला रेपो विकास के लिए है और एक टीम के हर सदस्य के पास इसका उपयोग है। दूसरा रेपो कोड की स्वचालित तैनाती के लिए है और इसलिए इसे मजबूत पहुंच प्रतिबंध लागू होते हैं।

डेवलपर्स के लिए सेटअप बहुत सरल और staightforward है: git clone https://github.com/<username>/test-test, अपना काम करें और इसे वापस धक्का दें।

सहयोगियों के लिए सेटअप में थोड़ा और अधिक जटिल है: विकास रेपो से

  1. पुल शाखाओं git clone https://github.com/<username>/test-test

  2. दूरस्थ भंडार git remote add production-repo https://github.com/<username>/test-production.git

  3. नई रेपो से डेटा लाने जोड़े git fetch production-repo

  4. नया स्थानीय बनाएं उत्पादन कोड और इसे करने के लिए git checkout -b local-production

  5. टेल Git स्विच के लिए शाखा स्थानीय एक git pull

  6. क्रमबद्ध बाहर संभव संघर्ष करने के लिए स्थानीय और दूरस्थ शाखाओं दूरदराज के उत्पादन शाखा के git branch -u production-repo/production

  7. डाउनलोड सामग्री से जोड़ने के लिए और बस!

अब सब कुछ है कि local-production शाखा से धकेल दिया जाता है test-production रेपो में मिल जाएगा और अन्य शाखाओं test-test रेपो पर पुश किया जाएगा।

ठीक है, यह अच्छा है, लेकिन अधिक बारीक ([व्यक्ति का नाम]-विकास) पहुंच के बारे में क्या है? - आप पूछ सकते हैं। जवाब यह है: आप प्रत्येक डेवलपर के लिए test-test के समान रेपो बना सकते हैं और उन्हें सेट अप करने के लिए समान पैटर्न का उपयोग कर सकते हैं। इस दृष्टिकोण का नकारात्मक पक्ष यह है कि सहयोगियों को test-test-[person's name]-development रिपोज़ में से प्रत्येक को क्लोन करना होगा।

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

इसके अलावा मैं आपको विंडोज़ के लिए आधिकारिक गिटहब ऐप में बग सुविधा के बारे में चेतावनी देना चाहता हूं। मूल से अलग अपस्ट्रीम वाली शाखाएं मूल हो जाएंगी। तो धक्का देने के लिए कमांड लाइन का उपयोग करें।

इन सभी चीजों को थोड़ा सा जटिल लगता है। लेकिन यह हमेशा ऐसा ही होता है यदि आप सादगी के लिए भुगतान नहीं करना चाहते हैं।

+9

मुझे लगता है कि आप एक गैर-भुगतान खाते के साथ एक निजी रेपो को पूरी तरह से फोर्क कर सकते हैं, और यह निजी बना हुआ है। –

+1

इस टिप के लिए धन्यवाद, जॉर्ज। मुझे यह काफी रोचक लगता है क्योंकि मुझे डर था कि गैर-भुगतान कांटा सार्वजनिक होगा। भुगतान और गैर-भुगतान गिटहब खातों के माध्यम से बस सत्यापित किया गया है और आप स्पॉट पर हैं। बीटीडब्ल्यू, तथ्य के बाद भी कांटा सार्वजनिक नहीं किया जा सकता है। –

9

आप गिटलैब और इसकी "संरक्षित शाखा" सुविधा को देखना चाहेंगे। मुझे लगता है कि यह वही है जो आप खोज रहे हैं। Keeping your code protected देखें।

11

नोट: Protected branches and required status checks (सितम्बर 3, 2015) बिल्कुल एक एकल शाखा की अनुमति देगा नहीं ("[व्यक्ति का नाम] के लिए विकास"), लेकिन यह क्लोन हो रही।

शाखा की रक्षा की जाएगी:

  • मजबूर के खिलाफ धक्का दिया
  • विलोपन
  • के खिलाफ मर्ज किए गए परिवर्तन के खिलाफ जब तक आवश्यक स्थिति जांचों में कामयाब

https://cloud.githubusercontent.com/assets/25792/9596474/27db3ce6-502a-11e5-9b19-5b47a8addc65.png

+1

"चेक" जोड़ना संभव होना चाहिए जो मूल रूप से जांचता है कि प्रतिबद्धता किसी अधिकृत उपयोगकर्ता से आई है या नहीं। हो सकता है कि आप स्वयं प्रतिबद्धता के आधार पर इसे समझने में सक्षम न हों (क्योंकि कोई भी ईमेल नकली कर सकता है), लेकिन उदाहरण के लिए, आप एक ऐप कर सकते हैं जहां अधिकृत उपयोगकर्ता पुश करने से पहले हैंश को प्रतिबद्ध कर सकते हैं। – interestinglythere

+0

एक और विकल्प: एक ऐप बनाएं जो आने वाली ध्रुवों की समीक्षा की अनुमति देता है और स्वचालित रूप से अस्वीकार कर दिया जाता है यदि कोई भी अधिकृत समय अवधि के भीतर उन्हें अधिकृत करता है। – interestinglythere

+0

@ आपकी दिलचस्पी है कि गिटोलाइट क्या कवर कर रहा है (http://gitolite.com/gitolite/gitolite.html#overview, http://stackoverflow.com/a/10888358/6309) – VonC

1

Bitbucket संस्करण (Bitbucket v4.9.1) आप द्वारा परिवर्तन को सीमित कर सकते हैं:

  1. शाखा का नाम
  2. शाखा का नाम पैटर्न
  3. शाखा का नाम मॉडलिंग

के बाद क्रियाएं प्रतिबंधित हो सकती हैं:

  1. रोकें सब बदल जाता है
  2. रोकें विलोपन
  3. रोकें rewirting इतिहास
  4. रोकें एक पुल अनुरोध

उपयोगकर्ता है कि एक अपवाद है दर्ज बिना परिवर्तन,

enter image description here enter image description here

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