Git और गंदा "त्रुटि: मौजूदा जानकारी को लॉक नहीं कर सकता / refs घातक"


360

दूरस्थ गिट रिपॉजिटरी (बेहतरकोड पर) से क्लोनिंग के बाद मैंने कुछ बदलाव किए, कमिट किया और पुश करने की कोशिश की:

git push origin master

त्रुटियों के साथ:

त्रुटि: मौजूदा जानकारी / refs को लॉक नहीं कर सकता
घातक हो सकता है: git-http-push विफल

यह मामला पहले से मौजूद रिपॉजिटरी का संबंध है।

मैंने पहले क्या किया था:

  1. git config –global http.sslVerify false
  2. git init
  3. git remote add [url]
  4. git clone
  5. डेटा बदलें
  6. git commit

'बेटरकोड' में मुझे लॉग लॉग करने की कोई सुविधा नहीं है।

मैं विंडोज का उपयोग कर रहा हूं। विस्तृत त्रुटि थी:

C:\MyWorkStuff\Projects\Ruby\MyProject\>git push origin master
Unable to create branch path https://user:password@git.bettercodes.org/myproject/info/
error: cannot lock existing info/refs
fatal: git-http-push failed

मैंने पहले क्लोन किया, फिर कोड बदला और प्रतिबद्ध हो गया।


भाग्य नहीं, फिर वही त्रुटि।
एनडीडी

दो संभावित कारण: ए) जीआईटी का एक और उदाहरण चल रहा है (सभी गिट प्रक्रियाओं या रिबूट को मारें) बी) .it फ़ोल्डर को प्रशासक के रूप में बनाया गया था (ऑपरेशन के लिए प्रशासक कमांड लाइन की कोशिश करें)
FractalSpace

मेरे लिए, मैंने git fetchपहले कॉल करके त्रुटि को हल किया git pull
लेवी फुलर

1
वह त्रुटि बुरा
रॉब

जवाबों:


682

मेरे लिए यह काम किया:

git remote prune origin

चूंकि यह उत्तर बहुत सारे लोगों की मदद करने के लिए लगता है, इसलिए मैंने थोड़ा सा खोदा जो वास्तव में यहाँ होता है। यह क्या करेगा फ़ोल्डर में दूरस्थ शाखाओं के संदर्भ हटा दें .git/refs/remotes/origin। तो यह आपकी स्थानीय शाखाओं को प्रभावित नहीं करेगा और यह रिमोट को कुछ भी नहीं बदलेगा, लेकिन यह उन स्थानीय संदर्भों को अपडेट कर देगा जिन्हें आपको दूरस्थ शाखाओं में लाना है। ऐसा लगता है कि कुछ मामलों में इन संदर्भों में डेटा शामिल हो सकता है Git सही तरीके से नहीं संभाल सकता है।


1
मैंने कुछ पृष्ठभूमि जानकारी जोड़ी है, लेकिन मुझे ईमानदारी से कहना चाहिए कि मुझे नहीं पता कि यह क्यों और कैसे काम करता है :)
arno_v

1
git दूरस्थ prune मूल मेरे लिए काम करते हैं। लेकिन मैंने .git / refs / remotes / मूल के सभी संदर्भ हटा दिए हैं।
इसुरु मदुसनका

2
यह वही है जो करने का gitसुझाव देता है, लेकिन मैं इसे करने के लिए अनिच्छुक था क्योंकि कमांड ऐसा लगता है जैसे यह रिमोट को कुछ करता है।
थ्रू अवे अकाउंट

4
मैं भाग गयाgit gc --prune=now
स्टेनली मोहला

9
यह SCARIEST git cmd है जो मैंने थोड़ी देर में चलाया है। (पीएस: यह काम किया)
सत थिरू

456

आप करने की कोशिश करना चाहते हैं:

git gc --prune=now

Https://www.kernel.org/pub/software/scm/git/docs/git-gc.html देखें


Is --prune = अब जैसा कि --prune = all? यदि ऐसा है, तो प्रलेखन चेतावनी देता है कि आप बिना पड़ी वस्तुओं को खो सकते हैं। अगर वहाँ अनछुई वस्तुएं हैं, तो आपको संभवतः छंटाई से पहले उन्हें समेटने की कोशिश करनी चाहिए।
असफ इजराइल

3
जीवन रक्षक, धन्यवाद। git pullसमान त्रुटि संदेश के साथ अटक गया था।
फिल ब्रूबकर

4
इसने "git एरर के लिए मदद की: भ्रूण पर रेफरी लॉक नहीं कर सकता" अपवाद। आपका बहुत बहुत धन्यवाद!
सिकंदर

9
इसने मेरे लिए काम किया। लेकिन फिर मुझे हर बार जब मैं gitरिमोट से संबंधित कमांड का उपयोग करता हूं, तो मुझे उसी कमांड को निष्पादित करना पड़ता है। git remote prune originसमस्या को एक बार और सभी के लिए हल कर दिया।
कीयूर गोलानी

मेरा दिन बचाया! बहुत बहुत धन्यवाद :)
अभिषेक गौतम

188

यह मेरे साथ तब हुआ जब मेरे git रिमोट (bitbucket.org) ने उनके आईपी पते को बदल दिया। त्वरित फिक्स रिमोट को हटाने और फिर से जोड़ना था, फिर सब कुछ उम्मीद के मुताबिक काम किया। यदि आप git में रिमोट को हटाने और पुनः जोड़ने के तरीके से परिचित नहीं हैं, तो यहां चरण दिए गए हैं:

  1. अपने मौजूदा रिमोट के SSH git URL को कॉपी करें। आप इस आदेश का उपयोग करके इसे टर्मिनल पर प्रिंट कर सकते हैं:

    git remote -v

जो इस तरह से कुछ प्रिंट करेगा:

 origin git@server-address.org:account-name/repo-name.git (fetch)
 origin git@server-address.org:account-name/repo-name.git (push)
  1. अपने स्थानीय गिट रेपो से रिमोट निकालें:

    git remote rm origin

  2. रिमोट को अपने स्थानीय रेपो में जोड़ें:

    git remote add origin git@server-address.org:account-name/repo-name.git


8
मैंने git gc, git prune, rm 'फाइल विद लॉक एरर', git अपडेट सर्वर इंफ़ॉर्मेशन, आदि सब कुछ आज़माया है। केवल इस जवाब ने मेरे लिए काम किया। कभी-कभी यह विंडोज़ रिबूट, रिबूट की तरह होता है और यह काम करेगा। यहाँ भी, बस हटाएं और रेपो को फिर से जोड़ें, और सब कुछ ठीक हो जाता है;)
Marquinho Peli

12
उपरोक्त प्रक्रिया के बाद, मुझे git branch -u origin/master
जीईटी को

इसने .it / config में मेरी सभी रिमोट ट्रैकिंग जानकारी को उड़ा दिया और वास्तव में काम नहीं किया।
थॉमसमेकलॉड

यह मेरे लिए भी काम किया। अन्य सभी ने काम नहीं किया।
dondrzzy

42

रनिंग कमांड ने git update-ref -d refs/heads/origin/branchइसे ठीक कर दिया।


4
उस कमांड ने मेरे लिए भी चाल git update-ref -d refs/remotes/origin/my_branch
चली

यह मेरे लिए काम करता है, ऐसा प्रतीत होता है कि यह एक केस सेंसिटिविटी मुद्दा था। एक ही नाम वाली दो शाखाएं थीं जिन्हें किसी अन्य गिट उपयोगकर्ता द्वारा मूल में धकेल दिया गया था, एक में सभी निचले मामले थे और एक का शीर्षक मामला था।
th3uiguy

24

मैंने निम्न कार्य करके इसे ठीक किया

git branch --unset-upstream
rm .git/refs/remotes/origin/{branch}
git gc --prune=now
git branch --set-upstream-to=origin/{branch} {branch}
#or git push --set-upstream origin {branch}
git pull

यह मानते हुए कि आपकी स्थानीय और दूरस्थ शाखाएँ संरेखित हैं और आपको केवल गैर-घातक के रूप में रेफ्स की त्रुटि मिल रही है।


12

मेरे पास यह मुद्दा था क्योंकि मैं एक शाखा पर था, जिसका नाम एक अपस्ट्रीम शाखा के समान था। अर्थात अपस्ट्रीम शाखा को बुलाया गया example-branchऔर मेरी स्थानीय शाखा को बुलाया गया example-branch/backend। समाधान मेरी स्थानीय शाखा का नाम बदल रहा था जैसे:

git branch -m <new name goes here>

11

यह शायद अब तक हल हो गया है। लेकिन यहाँ मेरे लिए क्या काम किया है।

  1. स्थान:

    • यदि सर्वर-साइड पर लॉक रिपॉजिटरी है:

      1. सर्वर पर आपके git रिपॉजिटरी के लिए ssh।
      2. उस उपयोगकर्ता के रूप में लॉगिन करें जिसके पास रिपॉजिटरी को संशोधित करने और आपके सर्वर पर रिपॉजिटरी में नेविगेट करने की अनुमति है।
    • यदि लॉक रिपॉजिटरी केवल स्थानीय है:

      1. गिट कंसोल खोलें और रिपॉजिटरी डायरेक्टरी में नेविगेट करें।
      2. यह आदेश चलाएँ:

        git update-server-info
        
  2. यदि आपको (दूरस्थ या / और स्थानीय) रिपॉजिटरी पर अनुमतियों को ठीक करना है। मेरे मामले में मैं करना पड़ा chmodकरने के लिए 777और chownकरने के लिएapache:apache

  3. स्थानीय भंडार से फिर से धक्का देने की कोशिश करें:

    git push
    

10

मेरे लिए क्या काम था:

  1. हटाना .git/logs/refs/remotes/origin/branch
  2. हटाना .git/refs/remotes/origin/branch
  3. Daud git gc --prune=now

1
एक जादू की तरह काम किया। अगर किसी को फ़ाइल / फ़ोल्डर नाम शाखा के साथ समस्या का सामना करना पड़ रहा है तो यह वास्तव में सभी शाखा नाम फ़ाइलों / फ़ोल्डरों का जिक्र है। आशा है कि ये आपकी मदद करेगा!
अंकित केशरवानी

7

यह मेरे लिए कैसे काम करता है।

  1. अपाचे डीएवी लॉक फाइल को अपने सर्वर पर देखें (जैसे / var / लॉक / एपाचे 2 / डीएवीलॉक)
  2. इसे मिटाओ
  3. इसे वेबसर्वर के लिए लिखने की अनुमति के साथ फिर से बनाएँ
  4. वेबसर्वर को पुनरारंभ करें

और भी तेज विकल्प:

  1. अपाचे डीएवी लॉक फाइल को अपने सर्वर पर देखें (जैसे / var / लॉक / एपाचे 2 / डीएवीलॉक)
  2. फ़ाइल को खाली करें: cat /dev/null > /var/lock/apache2/DAVlock
  3. वेबसर्वर को पुनरारंभ करें

यह मेरा मुद्दा था। पोस्ट के लिए धन्यवाद। मैंने एक शॉट में सभी को हटा दिया और अनुमति दे दी। #> rm DAVLock; touch DAVLock; chown www-data.www-data DAVLock; chmod 755 DAVLock; service apache2 restart
djneely

6

यह एक अनुमतियों के मुद्दे की तरह लगता है - क्या यह संभव है कि आपके पास दो खिड़कियां खुली थीं, अलग-अलग अधिकारों के साथ निष्पादित? शायद .गित फ़ोल्डर के स्वामित्व की जांच करें।

शायद यह देखने के लिए जांचें कि क्या कोई बकाया फ़ाइल लॉक खुला है, शायद आपके ओएस के लिए जाँच करने के लिए lsof या समकक्ष का उपयोग करें।


3

मेरे मामले में एक शाखा को एक उपनिर्देशिका में स्थानांतरित किया गया था और निर्देशिका को शाखा कहा जाता था। इससे गित भ्रमित हो गई। जब मैंने लोकल ब्रांच को डिलीट किया (सोर्सट्री में राइट क्लिक डिलीट के साथ) तो सब कुछ हमेशा की तरह काम किया।


3

इस संदेश को पाने के बाद मैंने चेकआउट कमांड किया और यह संदेश दिया गया:

Your branch is based on 'origin/myBranch', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

इस कमांड को चलाने के बाद मैं वापस सामान्य हो गया था।


2

अपडेट करें:

आपको अपनी ~ / .netrc फ़ाइल को संपादित करने की आवश्यकता हो सकती है:

https://bugs.launchpad.net/ubuntu/+source/git-core/+bug/293553

मूल उत्तर:

आपने ssl को अक्षम क्यों किया? मुझे लगता है कि यह आपको https के माध्यम से पुश करने में सक्षम नहीं होने के साथ करना पड़ सकता है। मैं इसे वापस सेट करूँगा और फिर से पुश करने की कोशिश करूँगा:

git config –global http.sslVerify true


1

मुझे यह समस्या थी, जब मैं एक नई सुविधा शाखा बनाने की कोशिश कर रहा था जिसमें पुरानी शाखा का नाम था, जैसे मूल - शाखा 1 और मैं चाहता था कि शाखा 1-सुविधा बनाई जाए। यह अभेद्य नहीं था, लेकिन शाखा 1 / सुविधा पहले से ही थी।


1

मेरे मामले में मुझे पुराने टैगों को मैन्युअल रूप से हटाना पड़ा, जिन्हें रिमोट पर हटा दिया गया था।


1

मेरे मामले में, यह उस शाखा नाम से जुड़ा था जिसे मैंने पहले ही बनाया था।

इस समस्या को हल करने के लिए मैंने नाम के साथ एक शाखा बनाई है जो कुछ के लिए मौजूद नहीं होनी चाहिए, जैसे:

git checkout -b some_unknown_branch

तब मैंने अपनी सभी अन्य शाखाओं (सक्रिय नहीं) को साफ कर दिया क्योंकि वे सिर्फ अनावश्यक कचरा थीं।

git branch | grep -v \* | grep -v master | xargs git branch -D

और फिर नाम के साथ मेरी वर्तमान शाखा का नाम बदल दिया है जिसका मैंने इरादा किया है, जैसे:

git checkout -m my_desired_branch_name

0

Bettercodes.org के मामले में, समाधान अधिक काव्यात्मक है - परियोजना के सदस्यों को सौंपे गए अधिकारों में एकमात्र समस्या हो सकती है। सरल सदस्यों के पास अधिकार नहीं हैं! कृपया सुनिश्चित करें कि आपके पास मॉडरेटर या व्यवस्थापक अधिकार हैं। यह एक प्रशासक द्वारा परियोजना सेटिंग्स में bettercodes.org पर सेट किया जाना चाहिए, निश्चित रूप से।


0

मैंने इस त्रुटि को देखा जब git filter-branchकई उपनिर्देशिकाओं को एक नए, अलग भंडार ( इस उत्तर में) के रूप में अलग करने की कोशिश कर रहा था ) के ।

मैंने उपरोक्त सभी समाधानों की कोशिश की और उनमें से कोई भी काम नहीं किया। आखिरकार, मैंने फैसला किया कि मुझे अपने टैग को नई शाखा में बुरी तरह से संरक्षित करने की आवश्यकता नहीं है और बस भाग गया:

git remote remove origin
git tag | xargs git tag -d
git gc --prune=now
git filter-branch --index-filter 'git rm --cached -qr --ignore-unmatch -- . && git reset -q $GIT_COMMIT -- apps/AAA/ libs/xxx' --prune-empty -- --all
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.