2016-07-21 8 views
9

मैं एक नया गिट उपयोगकर्ता हूं और हाल ही में देखभाल करने के लिए डेट गिट रिपोजिटरी से बाहर कर दिया गया है।गिट शाखा का नाम - केस संवेदनशील या असंवेदनशील?

! [cr232] CR 232 Release 
     * [dev] Style Changes 
--------------- 
     * [dev] Style Changes 
     * [dev^] SMS 5.4 
     * [dev~2] Logo Change 
     * [dev~3] SMS 5.3 
     * [dev~4] SMS 5.2 
     * [dev~5] SIT R-0.3.3 EDW SMS Layers 
     * [dev~6] SIT Release R 0.3.0 
     +* [cr232] CR 232 Release 
     +* [cr232^] Dashboard Fix 
     +* [cr232~2] Release for system testing 

नोट एक शाखा इस बिंदु पर 'देव' कहा जाता है कि वहाँ:

यह मूल राज्य (Git शो-शाखा द्वारा उत्पादन) है। ध्यान दें कि हाइलाइट किया गया है देव के कई संदर्भ हैं (यानी देव, देव ^, देव ~ 2 आदि)।

मेरे विकास के उद्देश्य के लिए, मैं सभी पूंजी 'देव' नामक शाखा के साथ आने की कोशिश कर रहा था।

तो मैं आगे चला गया और नई शाखा (Git शाखा DEV) के लिए और अब चल Git शो शाखा -तिथि-आदेश बनाने:

! [DEV] Style Changes 
    ! [cr232] CR 232 Release 
     * [dev] Style Changes 
--------------- 
     * [DEV] Style Changes 
     * [DEV^] SMS 5.4 
     * [DEV~2] Logo Change 
     * [DEV~3] SMS 5.3 
     * [DEV~4] SMS 5.2 
     * [DEV~5] SIT R-0.3.3 EDW SMS Layers 
     * [DEV~6] SIT Release R 0.3.0 
     +* [cr232] CR 232 Release 
     +* [cr232^] Dashboard Fix 
     +* [cr232~2] Release for system testing 

ध्यान दें कि दोनों देव और देव शाखा के रूप में सूचीबद्ध हैं। ध्यान दें कि 5 वीं पंक्ति पर देव के संदर्भ अब DEV में बदल गए हैं (यानी DEV, DEV ^, DEV ~ 2 आदि)।

5 वें लाइन आउटपुट का जिक्र क्या है? मैं उम्मीद करता हूं कि इसे "देव" में बदलने के बजाय "देव" बने रहें क्योंकि इसके आगे के विवरण "देव" शाखा के दौरान पुराने काम के वर्णन को संदर्भित करते हैं।

मैं अब की तरह लग रहे वापस कैसे यह करने के लिए DV (चल Git शाखा -m देव डीवी) देव शाखा का नाम संशोधित करने और शाखा दिखाकर था पर लौटने के लिए कोशिश कर रहा हूँ:

! [DV] Style Changes 
    ! [cr232] CR 232 Release 
     * [dev] Style Changes 
--------------- 
     * [DV] Style Changes 
     * [DV^] SMS 5.4 
     * [DV~2] Logo Change 
     * [DV~3] SMS 5.3 
     * [DV~4] SMS 5.2 
     * [DV~5] SIT R-0.3.3 EDW SMS Layers 
     * [DV~6] SIT Release R 0.3.0 
     +* [cr232] CR 232 Release 
     +* [cr232^] Dashboard Fix 
     +* [cr232~2] Release for system testing 

ध्यान दें कि शाखा अब डीवी और देव सहित है। ध्यान दें कि देव के लिए 5 वें लाइन संदर्भ अब डीवी में बदल गए हैं (यानी DV, DV ^, DV ~ 2 आदि)।

क्या DV संदर्भों की अवधि में मूल स्थिति के दौरान यह वापस पाने का कोई तरीका है? क्या गिट उलझन में आया और मेरी ऐतिहासिक जानकारी को उस शाखा के साथ बदल दिया गया जो समान है और केवल पूंजीगत मामले से अलग है?

कृपया इस पर सहायता करें कि मैं इसे कैसे ठीक कर सकता हूं। धन्यवाद ढेर

+0

क्या आप विंडोज सिस्टम का उपयोग कर रहे हैं? – torek

+0

torek - मैं इस – jak

+0

गिट 2.12 के लिए यूनिक्स मशीन का उपयोग करता हूं यह बताता है कि शाखा नाम वास्तव में केस संवेदनशील हैं: http://stackoverflow.com/a/41307509/6309 – VonC

उत्तर

3

तो मैं आगे चला गया और नई शाखा (Git शाखा देव)

आप एक नई शाखा DEV बनाई गई है जब आप शाखा dev पर थे पैदा करते हैं। तो DEV और dev दो शाखाएं हैं जो एक ही प्रतिबद्धता को इंगित करती हैं। DEV से DV का नाम बदलने के बाद, अब DV और dev दो शाखाएं हैं जो एक ही प्रतिबद्धता को इंगित करती हैं।

सबकुछ ठीक है। यदि आप DV को परेशान करने के लिए नहीं चाहते हैं, तो आप शाखा DV को निकालने के लिए केवल git branch -d DV चला सकते हैं। यदि आप वास्तव में एक नई शाखा बनाना चाहते हैं, तो कुछ नामकरण नियमों का पालन करना बेहतर है जो आपको और दूसरों को भ्रमित नहीं कर सकता है।

मैंने कभी भी git show-branch का उपयोग नहीं किया। git log --oneline --all --graph --decorate=full एक स्पष्ट लॉग ग्राफिक खींचता है।

+0

मुझे उम्मीद है कि यह मामला है।लेकिन सिर्फ यह स्पष्ट करने के लिए, मैंने DEV को बनाया, मैंने टीएसटी और पीआरडी नामक दो अन्य शाखाएं भी बनाईं, जबकि मैं देव शाखा में हूं। तो ये दोनों एक ही प्रतिबद्धता को इंगित करेंगे। लेकिन जब मैं DEV शाखा बनाता हूं तो संदर्भ केवल तभी बदलता है? – jak

+0

@ नोरा मैंने कुछ परीक्षण किए और नियम पाया। '--------' से ऊपर का हिस्सा, शाखाओं को कुछ क्रम द्वारा क्रमबद्ध किया जाता है। यदि किसी भी विकल्प के बिना 'गिट शो-शाखा' है, तो यह वर्णमाला क्रम है। '---------' के नीचे का हिस्सा, यदि कुछ शाखाएं एक ही प्रतिबद्धता को इंगित करती हैं, तो उनमें से पहला प्रतिनिधि के रूप में सूचीबद्ध होता है। डीवी टीएसटी और पीआरडी से पहले आता है, इसलिए यह उनका प्रतिनिधि है। – ElpieKay

+0

@ नोरा और मुझे और जानकारी मिली। मुझे लगता है कि आपके शो-शाखा आउटपुट में चिह्न '+' की स्थिति गलत है। वे पहले '!' चिह्न से नीचे होना चाहिए। और '! के अलग-अलग रंग हैं, यदि उपर्युक्त शाखा से नीचे की प्रतिबद्धता पहुंच योग्य है, तो'! 'के नीचे एक' + 'सही है जो शाखा का प्रतिनिधित्व करता है। चेक-आउट शाखा को '*' के बजाय उपसर्ग किया गया है। – ElpieKay

21

विषय पंक्ति में सिर्फ प्रश्न का उत्तर देना, git show-branch बारे में कुछ भी संबोधित कर के बिना (like ElpieKay, मैं वास्तव में कभी git show-branch का उपयोग करें; ऐसा लगता है मुख्य रूप से गलत जानकारी):

Git शाखा के नाम और टैग नाम, और अन्य सभी संदर्भ नाम, क्योंकि गिट उन्हें कॉल करता है-मूल रूप से इच्छित केस-संवेदी होने के लिए था।

यह सब लिनक्स/यूनिक्स मशीनों पर पूरी तरह से काम करता है, जहां गिट का कोड केस-सेंसिटिव से शुरू होता है। जब गिट फ़ाइल सिस्टम में फ़ाइल नाम (जो केवल कभी-कभी) करता है, तो फ़ाइल सिस्टम केस-संवेदी भी होता है।

यह कभी-कभी विंडोज और कुछ मैकोज़ सिस्टम पर विफल रहता है। विशेष रूप से, यह तब विफल हो जाता है जब गिट अलग-अलग फ़ाइलों में संदर्भ संग्रहीत करता है, जिनके नाम संदर्भ नाम से प्राप्त किए जाते हैं, और उन फ़ाइल नाम केस-असंवेदनशील होते हैं (उदाहरण के लिए, केस-संरक्षित, लेकिन नाम मिलान के दौरान गुना मामला; या यहां तक ​​कि सब कुछ अपरकेस में परिवर्तित करना वास्तव में, वास्तव में पुराने FAT 8.3 प्रारूप में, लेकिन हम उम्मीद कर सकते हैं कि कोई आधुनिक फ़ाइल सिस्टम ऐसा नहीं करता है)।

जैसा ऊपर बताया गया है, गिट हमेशा संदर्भ नामों को फ़ाइल नामों के रूप में संग्रहीत नहीं करता है। वास्तव में, प्रारंभिक क्लोन पर, सभी नाम .git/packed-refs, नामक एक ही फ़ाइल में हैं, इसलिए इस बिंदु पर वे केस संवेदनशील हैं। लेकिन वे समय के साथ "अनपॅक" बन जाते हैं, और फिर कुछ सिस्टमों पर वे केस-फोल्डिंग बन जाते हैं।

क्योंकि यह कभी-कभी कुछ सिस्टमों में विफल रहता है, आमतौर पर कई संदर्भ नामों का उपयोग करने से बचने के लिए सबसे अच्छा होता है जो केवल मामले में भिन्न होते हैं।


1 बेशक, आधुनिक यूनिक्स/लिनक्स सिस्टम पर, अब आप केस-संरक्षण बल्कि केस-संवेदी फाइल सिस्टम, और Windows और MacOS अब मामला नहीं करने के लिए कहा जा सकता है के लिए उपयोग कर सकते हैं कुछ फाइल सिस्टम के लिए फोल्डिंग। (लेकिन यदि आप डिफ़ॉल्ट से बदलते हैं, तो आपके बॉक्स के असफल होने के लिए सॉफ़्टवेयर की अपेक्षा करें, क्योंकि यह होगा। फ़ोटोशॉप जैसी चीजें आंतरिक रूप से foo और FOO नामक फ़ाइलों का उपयोग करने का प्रयास करती हैं और उम्मीद है कि यह एक ही फ़ाइल को संदर्भित करे!)

यह पैक-संदर्भ फ़ाइल काफी समय से आसपास रही है, लेकिन हमेशा के लिए नहीं, और गिट के शुरुआती संस्करण इसका उपयोग नहीं कर सकते हैं। आंतरिक रूप से, गिट एक नया "प्लग करने योग्य संदर्भ नाम इंटरफ़ेस" प्राप्त कर रहा है और गिट के भविष्य के संस्करण न तो इस फ़ाइल का उपयोग कर सकते हैं, न ही व्यक्तिगत प्रति-संदर्भ फ़ाइलों का उपयोग कर सकते हैं।

सामान्य रूप से, संदर्भ बनाने या अद्यतन करने से एक अनपॅक संदर्भ फ़ाइल अस्तित्व में आती है। चल रहा है git pack-refs --all पैक किए गए लोगों के साथ अनपॅक किए गए संदर्भों को प्रतिस्थापित करेगा, पूर्ण केस-संवेदनशीलता बहाल करेगा। --all के बिना, git pack-refs केवल पहले से ही पैक किए गए संदर्भ पैक करता है, जो कि बड़े पैमाने पर ऑपरेशन का बेकार तरीका है (यह उस मामले के लिए था जिसका उपयोग अब नहीं किया जाता है)।

+2

धन्यवाद बहुत जानकारीपूर्ण टोरेक – jak

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