2013-07-02 3 views
7

टैग सबवर्सन में शाखाओं के रूप में लागू किए जाते हैं। इस प्रकार मेरा प्रश्न: सबवर्सन टैग बनाने के बाद - मैं इस शाखा को कैसे बंद कर सकता हूं कि कोई भी उस टैग-शाखा में दुर्घटनाओं में परिवर्तन जोड़ता है?एक उपवर्तन टैग-शाखा को कैसे बंद करें?

उदाहरण के लिए निम्न निर्देशिका लेआउट पर विचार करें:

 
calc+-trunk 
    |-branches 
    |-tags 

कुछ बिंदु ट्रंक पर रिलीज के लिए तैयार है और टैग है:

$ svn cp svn://example.net/calc/trunk svn://example.net/calc/tags/v1.0 

अब निम्नलिखित दुर्घटना हो सकता है:

$ svn co svn://example.net/calc/tags/v1.0 
$ cd v1.0 
$ # change files 
$ svn ci 

(शायद उपरोक्त यूआरएल की प्रतिलिपि बनाई गई थी और इसके बजाय एक शाखा का मतलब था)

मैं शाखा calc/tags/v1.0 को कैसे बंद कर सकता हूं जैसे कि अंतिम svn ci विफल हो जाएगा?

मैं इसे बंद करने के लिए कहता हूं - वैकल्पिक रूप से आप उस ऑपरेशन को एक शाखा को केवल-पढ़ने के लिए स्विच करने के लिए कॉल कर सकते हैं - या ऐसा कुछ।

+1

{पुराना नाम} _closed। इसलिए हम अभी भी जानते हैं कि हमने एक फीचर शाखा बनाई है (एक उपयोगी नाम के साथ) और बाद में विलय के बाद इसे बंद कर दिया। – Bjoern

उत्तर

6

आप प्री-प्रतिबद्ध हुक के माध्यम से काम कर सकते हैं। This one आपको बनाने की अनुमति देगा, लेकिन टैग संपादित नहीं करेगा। आप शाखाओं तक पहुंच नियंत्रित कर सकते हैं (उन पर परिवर्तनों को रोक सकते हैं या रख सकते हैं कि लोगों के चयन समूह में कौन बदलाव कर सकता है)।

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

आप नियंत्रण फ़ाइल के माध्यम से हुक को नियंत्रित करते हैं (और वह नियंत्रण फ़ाइल भी आसान पहुंच के लिए भंडार में रह सकती है)। पहली पंक्ति किसी को लिखने से /tags निर्देशिका (या कोई उप निर्देशिका) से रोकती है। दूसरा उपयोगकर्ता उपयोगकर्ताओं को एक नए टैग पर प्रतिलिपि बनाने की अनुमति देता है, लेकिन वे उस टैग में कुछ भी संशोधित नहीं कर सकते हैं।

[FILE You cannot edit a tag once it's been created] 
file = /tags/** 
access = read-only 
users = @ALL 

[FILE You cannot edit a tag once it's been created] 
file = /tags/* 
access = add-only 
users = @ALL 

आप एक ही शाखा में एक ही काम कर सकते हैं। इधर, 2.2 शाखा पूरी तरह से बंद कर दिया जाता है और केवल बॉब और कैरोल के रूप में यह रिलीज के लिए तैयार हो रही है 2.3 शाखा में परिवर्तन कर सकते हैं:

[FILE No one is allowed to touch the 2.2 branch. It is dead] 
file = /branches/2.2 
access = read-only 
users = @all 

[FILE Only Bob and Carol can make changes to the 2.3 branch] 
file = /branches/2.3/** 
access = read-only 
users = @ALL 

[FILE Only Bob and Carol can make changes to the 2.3 branch] 
file = /branches/2.3/** 
access = read-write 
users bob, carol 
सुविधा शाखाओं हम अपनी कंपनी में एक नियम है कि हम करने के लिए शाखा का नाम बदलने के बारे में
1

आपके पास सबसे आसान/सबसे तेज़ से सबसे जटिल तक तीन विकल्प हैं।

  1. शाखा हटाएं (यह वास्तव में हटाया नहीं गया है, आप इसे हमेशा पुनर्प्राप्त कर सकते हैं)।
  2. उस पथ पर लिखने से इंकार करने के लिए अपने पथ-आधारित प्राधिकरण कॉन्फ़िगरेशन फ़ाइल (जिसे आप एक का उपयोग करते हैं) में एक नियम बनाएं।
  3. इंस्टॉल करें (या संशोधित करें, यदि कोई पहले से मौजूद है) एक पूर्व-प्रतिबद्ध हुक स्क्रिप्ट उस पथ पर किसी भी काम को अस्वीकार करने के लिए।
+0

एचएम, इसे हटाने से इसे 'कैल्क/टैग' लिस्टिंग से भी हटा दिया जाएगा, है ना? विकल्प 3 सबसे उपयोगी एक जैसा लगता है - क्योंकि उपयोगकर्ता 'calc/tag' के अंतर्गत लिखने में सक्षम होना चाहिए - यानी _new_ टैग बनाते समय। मौजूदा टैग्स के लिए बस प्रतिबद्ध होना चाहिए। क्या आप सबूत-ऑफ-अवधारणा हुक उदाहरण जोड़ सकते हैं? – maxschlepzig

+0

हटाना इसे 'HEAD' संशोधन (या हटाए जाने के बाद किसी भी संशोधन के बाद) में दिखाई नहीं देगा, लेकिन यह अभी भी भंडार में है। एक समान स्क्रिप्ट पर मार्गदर्शन के लिए http://stackoverflow.com/questions/464384/svn-pre-commit-hook-for-avoiding-changes-to-tags-subdirectories देखें। – alroc

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