2012-04-13 17 views
50
है

जब मैं अपने रेपो पर Git स्थिति चलाने मैं fatal: Not a git repository: /my repo/.git/modules/docsGit स्थिति देता है घातक: कोई Git भंडार लेकिन .git मौजूद है और प्रमुख उचित अनुमतियां

मैं देख लिया है और .git मौजूद है और उचित के साथ सिर में शामिल है अनुमतियाँ। मैं कई अन्य आदेश ठीक चला सकता हूं। अगर मैं गिट गुई चलाता हूं तो यह ठीक खुलता है और कुछ बदली गई फाइलों को सूचीबद्ध करेगा, लेकिन उनमें से बहुत कुछ गायब है।

मुझे लगता है कि सिर में कुछ प्रकार का भ्रष्टाचार हो सकता है, हालांकि यह सुनिश्चित नहीं है। किसी भी विचार को पूरे रेपो को मिटाए बिना इसे कैसे ठीक किया जाए?

अद्यतन: मुझे एहसास हुआ कि मैंने रेपो की निर्देशिका का नाम बदल दिया है। त्रुटि में संदर्भित निर्देशिका निर्देशिका का पुराना नाम है। तो मेरा वर्तमान रेपो /new dir/.git पर है लेकिन त्रुटि Not a git repository: /old dir/.git/modules/docs कह रही है। तो शायद गिट उलझन में है?

+0

आप नेस्टिंग Git संग्रह कर रहे हैं? – nes1983

+0

@ nes1983 मेरे पास कई सबमिड्यूल हैं, हालांकि यह समस्या मुख्य रेपो के साथ है। –

उत्तर

7

आखिरकार मैंने हल किया कि यह मुद्दा एक सबमिड्यूल के साथ किसी समस्या के कारण था। बस रिपो निर्देशिका का नाम बदलने से उस सबमिशन के साथ एक संघर्ष हुआ। How can I rename a git repository with submodules? में चर्चा देखने के बाद मुझे एहसास हुआ कि रेपो क्लोनिंग निर्देशिका का नाम बदलने के बजाय जाने का एक बेहतर तरीका है और इसने समस्या को हल करने के साथ हल किया है।

{submodule}/.git 
.git/modules/{submodule}/config 

इसलिए, यदि आप रेपो ले जाया गया है, इन दो फाइलों में निरपेक्ष पथ मान्य नहीं हैं, और 'नहीं एक Git भंडार' त्रुटि का कारण:

+0

इस समस्या से पुनर्प्राप्त केवल प्रति पाठ मॉड्यूल में दो छोटे मैन्युअल संपादन लेता है। मेरे लिए रिपोजिटरी और उसके सभी सबमिशन (विज्ञापनों) को दोबारा क्लोन करने से आसान है। –

+1

@JoshFarneman मुझे (नौसिखिया) को समझना चाहिए कि आपने क्या किया है। कृपया पहले और बाद में 'स्पष्ट कोड' प्रदान करें। तो कोई समझ सकता है कि क्या आवश्यक है। – alex

75

इन दो फ़ाइलों पूर्ण submodule पथ है। बस इन फ़ाइलों को मैन्युअल रूप से ठीक करें।

+10

धन्यवाद, यह मेरे लिए अच्छा काम करता है। हालांकि, दूसरा पथ मेरे लिए थोड़ा छोटा था: '.git/मॉड्यूल/{submodule}/config' (मैं उबंटू पर गिट संस्करण 1.7.9.5 का उपयोग कर रहा हूं) –

+1

मैं बस पीसी से मैक में स्थानांतरित हो गया और एक ही समस्या । मैंने उन दो फाइलों में पथ अपडेट किया, और नया पथ सही है, लेकिन मुझे अभी भी 'घातक: गिट रिपोजिटरी' नहीं मिल रहा है। उस स्थान पर एक .git फ़ाइल है, तो शायद मुझे कुछ और याद आ रहा है? –

+3

बस यहां एक नोट, मेरे लिए कॉन्फ़िगरेशन फ़ाइल के पास .git फ़ाइल के विपरीत एक सापेक्ष पथ है। –

35

गिट के पूर्व संस्करणों ने एक सबमिशन के गिटदिर का पता लगाने के लिए एक पूर्ण पथ का उपयोग किया। समाधान इस प्रकार है:

  1. latest version पर गिट अपग्रेड करें। कुछ कहते हैं कि आपको कम से कम संस्करण 1.7.10 की आवश्यकता होगी। मैंने गिट 1.8.3 के साथ इस मुद्दे को सफलतापूर्वक हल किया।
  2. सभी टूटे हुए सबमिशन फ़ोल्डरों को हटाएं: rm -rf broken_submodule_folder
  3. पंजीकृत सबमिड्यूल अपडेट करें: git submodule update। आपको चेक-आउट होने वाले सबमिड्यूल देखना चाहिए।
+0

धन्यवाद! मुझे बहुत काम बचाया, यह! :-) – Potherca

1

मैं भी submodules के साथ इस मुद्दे का सामना करना पड़ रहा था, लेकिन दो फ़ाइलों

{submodule} /। Git .git/मॉड्यूल/submodules/{submodule}/config

मैं का विश्लेषण करने के बाद एहसास हुआ कि मेरे मामले में यह कोई मुद्दा नहीं था।

थोड़ा सा शोध करने के बाद मुझे पता चला है कि मेरे मामले में मुझे गिट (कमांड: मॉड्यूल जोड़ने गिट) जोड़ना पड़ा और त्रुटि गायब हो गई।

+1

यह 'मॉड्यूल ऐड गिट' कमांड क्या है जिसके बारे में आप बात करते हैं? –

4

@ ax003d answer के बाद, आप नया पथ (new/path) के साथ सभी पुराने पथ (old/path) इस आदेश का उपयोग बदल सकते:

find . -type f \(-name ".git" -o \(-path "*.git/modules/*" -name config \) \) -print0 | xargs -0 sed -i -e "s#old/path#new/path#g" 

आप जांच करना चाह सकते क्या पुराने रास्तों उन्हें जगह से पहले की तरह लग रहे :

find . -type f \(-name ".git" -o \(-path "*.git/modules/*" -name config \) \) -print0 | xargs -0 grep --colour "old/path" 
4

मैं

rm -rf .git/modules 
git submodule update --init 
के साथ सभी Git-submodules reseting करके इस समस्या को हल
+0

वाह! बस मेरे लिए काम किया! मेरे मामले में मैंने गलती से "आरएम-आर" बनाया जो वाइल्डकार्ड मिलान के साथ नहीं था। कुछ प्रॉम्प्ट के लिए रुकने से पहले यह परियोजना रूट से कुछ फाइलों को मिटा दिया। – Sankalp

1

मेरे मामले में समस्या थी .git/HEAD फ़ाइल कहीं भी इंगित नहीं हुई थी, इसमें केवल अजीब पात्रों का अनुक्रम था। मैंने .git/ORIG_HEAD की सामग्री को .git/HEAD में कॉपी किया और यह फिर से काम किया।

Source

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