2010-03-18 14 views
36

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

क्या जीआईटी में एक विशिष्ट शाखा को लॉक करने का कोई तरीका है?

या क्या कोई तरीका है कि एक अद्यतन हुक पहचान सकता है कि उपयोगकर्ता किस शाखा को दबा रहा है और किस शाखा को धक्का दिया जाता है?

+1

आप (प्रयोग टैग तो) हमेशा के लिए शाखा का नाम लॉक करने के लिए, या बस धक्का होने पर अन्य लोगों चाहते हैं इसके लिए? – hasen

+0

यह भी देखें http://stackoverflow.com/a/5097437/6309 – VonC

+0

एक अलग रेपो होने और इसमें खींचने में क्या गलत है? यह एक और मानक वर्कफ़्लो होगा। –

उत्तर

34

शाखा धक्का दिया जा रहा है update hook को पहले पैरामीटर है। आप जोर दे रहा है, इस कोड (hooks/update में रखा) के लिए शाखा myfeature लॉक करने के लिए चाहते हैं, तो यह करना होगा:

#!/bin/sh 
# lock the myfeature branch for pushing 
refname="$1" 

if [[ $refname == "refs/heads/myfeature" ]] 
then 
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 
    echo "You cannot push to myfeature! It's locked" 
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 
    exit 1 
fi 
exit 0 
+2

मुझे गिटहब पर रिमोट रेपो में एक .git निर्देशिका नहीं दिखाई दे रही है। मैं केवल अपने स्थानीय क्लोन रेपो में एक .git निर्देशिका देखता हूं। लेकिन मुझे नहीं लगता कि इस कोड को डालने में।मेरे स्थानीय रेपो में गिट/हुक/अपडेट से किसी भी व्यक्ति को उस स्थानीय शाखा से उस दूरस्थ शाखा में धक्का देने से रोकने का असर होगा। क्या मैं कुछ भूल रहा हूँ? –

+0

@AjoyBhatia एक .git निर्देशिका होना चाहिए। यदि यह एक नंगे भंडार है, तो मुख्य निर्देशिका पहले से ही .git निर्देशिका है। (यदि आपके पास हेड, शाखाएं, हुक, कॉन्फ़िगर इत्यादि जैसी फ़ाइलें/फ़ोल्डर्स हैं तो यह एक नंगे रेपो है) अपने हुक को हुक/डायर में रखें – pentix

8

अद्यतन हुक, डॉक्स से:

हुक प्रत्येक रेफरी अद्यतन किया जा करने के लिए एक बार कार्यान्वित करता है, और तीन पैरामीटर लेता है:

  • रेफरी के नाम अपडेट किया जा रहा,
  • रेफरी में संग्रहीत पुराना ऑब्जेक्ट नाम,
  • और नया ऑब्जेक्ट नाम रेफरी में संग्रहीत किया जाना है।

तो ... हाँ, यह वास्तव में जानता है क्या शाखा धक्का दिया जा रहा है, और बस उस पैरामीटर और बाहर निकलने की विफलता की जांच कर सकते हैं अगर यह शाखा को धक्का दे दिया नहीं चाहता है।

और अगर आप को (समझदारी से) चाहते हैं तो इस से पहले उपयोगकर्ता वस्तुओं अपलोड की गई है है, तो आप उपयोग कर सकते हैं पूर्व प्राप्त हुक:

यह हुक प्राप्त ऑपरेशन के लिए एक बार निष्पादित करता है। यह कोई तर्क लेता है, लेकिन के लिए प्रत्येक रेफरी अद्यतन करने की यह मानक इनपुट पर प्रारूप की एक पंक्ति प्राप्त करता है:

<old-value> सपा <new-value> सपा <ref-name> वामो

जहां <old-value> वर्ष वस्तु रेफरी में संग्रहीत नाम है, <new-value> रेफरी में संग्रहीत करने के लिए नया ऑब्जेक्ट नाम और <ref-name> रेफरी का पूरा नाम है।

+0

यह जानकारी मुझे मदद करती है, लेकिन हुक अपडेट केवल शाखा को धक्का दिया जाता है (स्रोत शाखा), क्या अपडेट हुक से कैप्चर करने का कोई तरीका है, जिस कोड को शाखा (लक्ष्य शाखा) पर धकेल दिया जा रहा है? –

7

gitolite की तरह एक उपकरण की सुविधा के इस प्रकार मेरा मानना ​​है कि है (उन अंतराल तथा लाइन फ़ीड कर रहे हैं): http://github.com/sitaramc/gitolite

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