2011-02-13 7 views
19

निम्नलिखित खोल कोड सही तरीके से प्रतीकात्मक संदर्भगिट प्रतीकात्मक संदर्भ का अनुशंसित उपयोग क्या है?

git symbolic-ref "first" "refs/heads/master" 
git symbolic-ref "second" "first" 
git symbolic-ref "nested/third" "second" 
git symbolic-ref "refs/heads/fourth" "nested/third" 

और निम्नलिखित खोल कोड सही तरीके से गुरु की नोक के लिए नवीनतम बनाया प्रतीकात्मक संदर्भ का समाधान करता है की एक श्रृंखला पैदा करता है। इन उपयोग के मामलों की

git show-ref "refs/heads/fourth" 

कोई भी आधिकारिक दस्तावेज (git-symbolic-ref doc, git-show-ref doc) में वर्णित हैं।

हालांकि, निम्नलिखित काम नहीं करता है

git check-ref-format --print "first" 

तो, मेरे सवाल कर रहे हैं:

  • यह refs/heads निर्देशिका के भीतर एक प्रतीकात्मक संदर्भ स्टोर करने के लिए ठीक है?
  • क्या चेन प्रतीकात्मक संदर्भों के लिए यह ठीक है?
  • "first" पारित होने पर चेक-रेफ-फॉर्मेट विफल रहता है, क्या इसका मतलब यह है कि "HEAD" से समान स्तर पर प्रतीकात्मक संदर्भ बनाने की अनुशंसा नहीं की जाती है? या शायद यह आदेश प्रतीकात्मक लिंक से निपटने का इरादा नहीं है?

मेरा इरादा यह सुनिश्चित करने के लिए है कि क्या समर्थित किया जा रहा है और मैं किसी भी चीज के आसपास काम नहीं कर रहा हूं या किसी बग से लाभ नहीं उठा रहा हूं।

+0

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

+1

@jleedev: यह एक बग नहीं है। उपयोगकर्ताओं को ग़लत चीजें करने से रोकने के लिए यह एक विशेषता है ... :-) – nulltoken

उत्तर

15

अंततः posted इस सवाल को गिट विकास मेलिंग सूची में मिला है।

Junio C Hamano, लीड गिट रखरखाव (+8700 प्रतिबद्धता) ने मुझे निम्नलिखित उत्तरों प्रदान किए।

अभी symrefs के केवल दो वैध प्रकार के होते हैं:

  • .git/HEAD, पर इशारा करते हुए के तहत refs/सिर/पदानुक्रम कहीं;

  • .git/refs/रिमोट/{कुछ सुदूर नाम}/HEAD, कहीं तहत refs/रिमोट/{एक ही रिमोट नाम}/पदानुक्रम पर इशारा करते हुए।

कोड,, पुनरावर्ती symrefs को हल करने के लिए तैयार किया जा सकता है के अलावा अन्य symrefs ऊपर दो प्रकार symrefs कि कहीं पर बिंदु है, लेकिन उन्हें के सभी क्या तंत्र के डिजाइन दायरे से बाहर हैं समर्थन का इरादा था। उनके साथ कोड क्या है (क्रैश किए बिना) डिज़ाइन नहीं है, लेकिन बस एक अपरिभाषित व्यवहार।

यदि हम रिमोट ट्रैकिंग पदानुक्रमों को 1.8.0 में पुनर्गठित करने का निर्णय लेते हैं तो यह बहुत अधिक नहीं बदलेगा। पूर्व बिल्कुल नहीं बदलेगा, और बाद में रेफ/रिमोट/{उसी रिमोट नाम}/सिर पदानुक्रम के बजाय इंगित करना शुरू कर देगा।

मैं थोड़ा याद TG अजीब स्थानों पर/HEAD .git बात करने के लिए symref तंत्र का दुरुपयोग किया; यह अभी भी ऐसा कर रहा है, और यदि ऐसा है तो हमें उपयोग को कवर करने के लिए उपर्युक्त सूची का विस्तार करना चाहिए।

+0

मेलिंग सूची धागे से लिंक करने के लिए लिंक: http://git.661346.n2.nabble.com/What-s-the-definition-of-a- valid-Git-symbolic-reference-tt6025154.html#a6026446 – Magicmaaan

3

आम तौर पर, symrefs refs/ के तहत रहते हैं - कम से कम, यह गिट सूट करता है (उदाहरण के लिए गिट फ़िल्टर-पेड़ का उपयोग करते समय, आपको refs/original/... मिलता है)। कुछ टूल रेफरी को अनदेखा करना चुन सकते हैं जिनके पास refs/ उपसर्ग नहीं है।

$ git symbolic-ref refs/first refs/heads/master 
$ git check-ref-format --print refs/first 
refs/first 
+0

तो, आपकी समझ यह है कि मुझे एक छेड़छाड़ से फायदा हो रहा है? क्या आपको symref चेनिंग के बारे में कोई जानकारी है? क्या यह वैध है या क्या मैं "गैर-संरक्षित-विरोधी" उपयोग का भी शोषण कर रहा हूं? – nulltoken

+0

"आम तौर पर" - एक सिमरेफ को छोड़कर कि हर किसी के पास 'हेड' है। – Cascabel

+1

रेफरी बाहर संभव हैं। Git/refs/- आप उन पर 'गिट लॉग' कह सकते हैं - जैसे कि FETCH_HEAD, HEAD, ORIG_HEAD, RENAMED-REF। लेकिन उदाहरण के लिए, हेड को छोड़कर गिट उन्हें नहीं दिखाएगा। – user611775

1

यह वांछनीय होगा कि प्रतीकात्मक लिंक का उपयोग अधिक पारदर्शी रूप से किया जा सकता है और इसे भी धक्का दिया जा सकता है। वे नए वर्कफ़्लोज़ के लिए एक शक्तिशाली उपकरण हो सकते हैं। वर्तमान में, यदि मैं एक प्रतीकात्मक लिंक बनाता हूं और फिर पुश करता हूं तो सर्वर के पास संबंधित संदर्भ में लिंक नहीं है।

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