2010-03-26 13 views
155

मुझे पूरा यकीन है कि मैंने कहीं लोकप्रिय गिट प्रोजेक्ट में देखा था, शाखाओं में "फीचर/xyz" जैसे पैटर्न थे।गिट शाखा नाम में स्लैश चरित्र का उपयोग

$ git branch labs/feature 
error: unable to resolve reference refs/heads/labs/feature: Not a directory 
fatal: Failed to lock ref for update: Not a directory 

के लिए एक ही समस्या (मेरी प्रारंभिक प्रयास):

$ git checkout -b labs/feature 

एक एक कैसे बना सकता है

हालांकि जब मैं स्लेश चरित्र के साथ एक शाखा बनाने का प्रयास करें, मैं कोई त्रुटि मिलती है स्लैश चरित्र के साथ गिट में शाखा?

+0

वास्तव में ऐसा लगता है कि आपको अपने 'HEAD' में समस्या है।ऐसा लगता है कि गिट सोचता है कि आपका 'हेड' शाखा 'लैब्स/फीचर'' का एक लिंक है जो नहीं बनाया गया है। मुझे नहीं पता कि यह कैसे हो सकता है, लेकिन इसका मतलब है कि 'फू/बार' नामक शाखा बनाने का आपका प्रयास, यह काम नहीं कर रहा है। कोई विचार है कि आपका 'हेड' कैसे अचंभित हुआ? –

+0

मैं भ्रम के लिए माफी चाहता हूँ, अपने 'प्रयोगशालाओं/सुविधा ", नहीं" foo/बार ", संपादित उदाहरण। –

उत्तर

175

क्या आप सुनिश्चित हैं कि शाखा labs पहले से मौजूद नहीं है (जैसा कि this thread में है)?

You can't have both a file, and a directory with the same name.

You're trying to get git to do basically this:

% cd .git/refs/heads 
% ls -l 
total 0 
-rw-rw-r-- 1 jhe jhe 41 2009-11-14 23:51 labs 
-rw-rw-r-- 1 jhe jhe 41 2009-11-14 23:51 master 
% mkdir labs 
mkdir: cannot create directory 'labs': File exists 

You're getting the equivalent of the "cannot create directory" error.
When you have a branch with slashes in it, it gets stored as a directory hierarchy under .git/refs/heads .

+3

धन्यवाद .. Interstingly मैं Git शाखा foo/बार (जो काम किया) की कोशिश की, फिर गिट शाखा-डी foo/bar, लेकिन मुझे लगता है कि foo/निर्देशिका (अब खाली) अभी भी मौजूद है! संपादित करें: और जैसे ही मैं "गिट शाखा फू" करता हूं इसे बदल दिया जाता है। सब ठीक हैं। –

+0

@faB: दुष्ट ... लेकिन अप्रत्याशित नहीं: यदि आप बार (' 'foo'' नाम स्थान में) नष्ट कर दिया, लेकिन नहीं' foo' (जो अन्य शाखा के लिए एक नाम स्थान के रूप में काम या एक शाखा में ही हो सकता है) – VonC

+0

यह नहीं करता है 'टी वास्तव में कोई फर्क है, लेकिन Git भी अपने रुख में परिवर्तन नहीं होता है जब आप 'पैक refs' कहते हैं, तो यह इस से बचाने के लिए अपने रास्ते से बाहर जा रहा है। –

-2

मैं गलत हो सकता था, लेकिन मैंने सोचा कि स्लेश केवल रिमोट रेपो से संबंधित होने पर शाखा नामों में दिखाई दिए थे, उदाहरण के लिए origin/master

+9

यह पूरी तरह से संभव है - और वास्तव में आम - स्थानीय नामों को उनके नामों में '/' के साथ बनाने के लिए। यह 'नेमस्पेस' में संबंधित शाखाओं को समूहित करने का एक आम तरीका है। –

+0

हाँ ईमानदार कि भ्रामक जब सीखने हो सकता है हो सकता है, लेकिन नामकरण भी उपयोगी हो सकता है। फिर फिर स्लैश या डैश का उपयोग करके, मुझे यकीन नहीं है कि यह व्यक्तिगत स्वाद से परे मायने रखता है? –

+1

Git प्रवाह नेमस्पेसिंग की इस शैली का उपयोग करता है :) – Rimian

84

पदानुक्रमित शाखा नाम (स्लैश के साथ शाखा नाम) होना संभव है। उदाहरण के लिए मेरे भंडार में मेरे पास ऐसी शाखा है (एसएस)। एक चेतावनी यह है कि आपके पास भंडार में शाखा 'foo' और शाखा 'foo/bar' दोनों नहीं हो सकते हैं।

आपकी समस्या नाम में स्लैश के साथ शाखा बनाने के साथ नहीं है।

 
$ git branch foo/bar 
error: unable to resolve reference refs/heads/labs/feature: Not a directory 
fatal: Failed to lock ref for update: Not a directory 

ऊपर त्रुटि संदेश 'प्रयोगशालाओं/सुविधा' शाखा, नहीं 'foo/बार' के बारे में बात (जब तक यह copy'n'paste में गलती, यानी आप सत्र के संपादित भागों है)। git branch या git rev-parse --symbolic-full-name HEAD का परिणाम क्या है?

+1

धन्यवाद, भ्रम की स्थिति के बारे में खेद है, मैं पहली बार लिखा एक foo/बार उदाहरण है, लेकिन मेरे वास्तविक परीक्षण से त्रुटि संदेश पेस्ट करें। यह फिर से नहीं करेगा :) और मेरी गलती के लिए भी खेद है, वास्तव में मेरे पास पहले से ही "प्रयोगशालाएं" शाखा थी। गहराई जवाब में के लिए –

21

कभी कभी कि समस्या तब होती है यदि आप पहले से ही आधार नाम के साथ एक शाखा है।

git checkout -b features/aName origin/features/aName 

दुर्भाग्य से, मैं पहले से ही features नाम के एक शाखा थी, और मुझे प्रश्न प्रश्नकर्ता के अपवाद है:

मैं इस कोशिश की।

शाखा को हटाने features समस्या को हल किया गया, उपरोक्त आदेश काम किया।

15

मेरे मामले में, मैं भूल गया था कि पहले से ही एक अप्रयुक्त labs शाखा थी। इसे हटाने समस्या हल:

git branch -d labs 
git checkout -b labs/feature 

स्पष्टीकरण:

प्रत्येक नाम केवल एक माता पिता शाखा या एक सामान्य शाखा, दोनों नहीं हो सकता है। Thats क्यों labsऔरlabs/feature एक ही समय में मौजूद नहीं हो सकता है।

इस व्यवहार का कारण यह है कि शाखाओं को फाइल सिस्टम में संग्रहीत किया जाता है और वहां आपके पास labs और एक निर्देशिका labs एक ही स्तर पर फ़ाइल नहीं हो सकती है।

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