Git ve iğrenç “hata: mevcut bilgileri kilitleyemiyor / ölümcül ölümler”


361

Uzak git deposundan klonlamadan sonra (bettercodes'te) bazı değişiklikler yaptım, taahhütte bulundum ve zorlamaya çalıştım:

git push origin master

Şununla ilgili hatalar:

hata: var olan bilgileri kilitleyemiyor / refs
ölümcül: git-http-push başarısız

Bu dava zaten var olan depo ile ilgilidir.

Daha önce yaptığım şey:

  1. git config –global http.sslVerify false
  2. git init
  3. git remote add [url]
  4. git clone
  5. verileri değiştir
  6. git commit

'Bettercodes' adresinde git log'a erişimim yok.

Windows kullanıyorum. Ayrıntılı hata:

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

Daha önce klonladım, sonra kodu değiştirdim ve taahhüt ettim.


Şans yok, yine aynı hata.
AnnD

İki olası neden: a) Git'in başka bir örneği çalışıyor (tüm git işlemlerini öldür veya yeniden başlat) b) .git klasörü Yönetici olarak oluşturuldu (işlem için yönetici komut satırını deneyin)
FractalSpace

Benim için, daha git fetchönce arayarak hatayı çözdüm git pull.
Levi Fuller

1
Bu hata kötü
Rob

Yanıtlar:


692

Benim için bu işe yaradı:

git remote prune origin

Bu cevap birçok insana yardımcı gibi göründüğü için, burada olanlara biraz kazdım. Bunun yapacağı şey, klasördeki uzak dallara yapılan başvuruları kaldırmaktır .git/refs/remotes/origin. Bu, yerel şubelerinizi etkilemez ve uzaktaki hiçbir şeyi değiştirmez, ancak uzak şubelere olan yerel referanslarınızı günceller. Bazı durumlarda bu referanslar Git'in doğru işleyemediği veriler içerebilir.


1
Bazı arka plan bilgileri ekledim, ama dürüstçe söylemek gerekir ki tam olarak neden ve nasıl çalıştığını bilmiyorum :)
arno_v

1
benim için budamak uzak erik kökeni. Ancak .git / refs / remotes / origin içindeki tüm referansları sildim.
Isuru Madusanka

2
Bu tam olarak gitbunu önerir, ama bunu yapmakta isteksizdim çünkü komut uzaktan kumandaya bir şey yapıyormuş gibi geliyor.
Deplasman Hesabı

4
Koştumgit gc --prune=now
Stanley Mohlala

9
Bu, bir süredir koştuğum SCARIEST git cmd. (PS: işe yaradı)
Sat Thiru

457

Yapmayı denemek istiyorsunuz:

git gc --prune=now

Bkz. Https://www.kernel.org/pub/software/scm/git/docs/git-gc.html


--Prune = şimdi --prune = all ile aynı mı? Eğer öyleyse, belgeler izinsiz nesneleri kaybedebileceğiniz konusunda uyarır. Bağlantısız nesneler varsa, budamadan önce muhtemelen onları uzlaştırmaya çalışmalısınız.
Assaf Israel

3
Hayat kurtarıcı, teşekkürler. git pullbenzer hata mesajı ile sıkışmış.
Phil Brubaker

4
Getirme sırasında "git hatası: ref kilitlenemiyor" özel durumu için yardımcı oldu. Çok teşekkürler!
Alexander

9
Bu benim için çalıştı. Ama sonra gituzaktan kumanda ile ilgili bir komutu her kullandığımda aynı komutu yürütmeye devam etmeliydim . git remote prune originsorunu bir kez ve herkes için çözdü.
Keyur Golani

günümü kurtardım! Çok teşekkürler :)
Abhishek Gautam

188

Git uzaktan kumandam (bitbucket.org) IP adreslerini değiştirdiğinde bu bana oldu. Hızlı düzeltme, uzaktan kumandayı kaldırmak ve yeniden eklemekti, sonra her şey beklendiği gibi çalıştı. Git'te bir uzaktan kumandayı nasıl kaldıracağınızı ve yeniden ekleyeceğinizi bilmiyorsanız, aşağıdaki adımlar şunlardır:

  1. Mevcut uzaktan kumandanızın SSH git URL'sini kopyalayın. Bu komutu kullanarak terminale yazdırabilirsiniz:

    git remote -v

hangi böyle bir şey yazdıracak:

 origin git@server-address.org:account-name/repo-name.git (fetch)
 origin git@server-address.org:account-name/repo-name.git (push)
  1. Uzaktan kumandayı yerel git deponuzdan kaldırın:

    git remote rm origin

  2. Uzaktan kumandayı yerel deponuza ekleyin:

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


8
Git gc, git prune, rm 'kilit hatası ile dosya', git güncelleme sunucusu bilgileri, vb. Gibi her şeyi denedim. Sadece bu cevap benim için çalıştı. Bazen bir pencerenin yeniden başlatılması, yeniden başlatılması gibi çalışır. Burada aynı, sadece kaldırmak ve tekrar repo eklemek, ve her şey yolunda gidiyor;)
Marquinho Peli

12
Yukarıdaki prosedürden sonra, git ile uzak dalı tekrar izlemeyi söylemem gerekiyordu:git branch -u origin/master
fotinsky

Bu .git / config içindeki tüm uzaktan izleme bilgilerimi havaya uçurdu ve aslında işe yaramadı.
ThomasMcLeod

Bu benim için de işe yaradı. Diğerleri çalışmadı.
dondrzzy

42

Çalışan komut git update-ref -d refs/heads/origin/branchdüzeltildi.


4
Uzak komut ref biraz farklı olmasına rağmen, bu komut benim için de hile yaptı:git update-ref -d refs/remotes/origin/my_branch
ndeslandes

Bu benim için çalıştı, bu bir vaka duyarlılığı sorunu gibi görünüyor. Aynı ada sahip başka bir git kullanıcısı tarafından başlatılmak üzere itilen iki şube vardı, biri küçük harfli, diğeri ise başlık vakasıydı.
th3uiguy

24

Bunu aşağıdakileri yaparak düzelttim

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

Bu, yerel ve uzak şubelerinizin hizalanmış olduğunu ve refs hatasını ölümcül olmadığı için aldığınızı varsayar.


12

Bu sorunu yaşadım çünkü yukarı yönlü bir şubeye benzer bir adı olan bir şubedeydim. yani memba şubesi çağrıldı example-branchve yerel şubem çağrıldı example-branch/backend. Çözüm şu şekilde yerel şubemin adını değiştiriyordu:

git branch -m <new name goes here>

12

Benim için işe yarayan şuydu:

  1. Kaldırmak .git/logs/refs/remotes/origin/branch
  2. Kaldırmak .git/refs/remotes/origin/branch
  3. Çalıştırmak git gc --prune=now

1
Bir cazibe gibi çalıştı. Herkes dosya / klasör adı dalı ile sorun yaşıyorsa, aslında tüm şube adı dosyalarına / klasörlerine atıfta bulunuyor. Umarım bu yardımcı olur!
Ankit Kesharwani

11

Bu muhtemelen şimdiye kadar çözüldü. Ama işte benim için işe yarayan.

  1. Yer:

    • Sunucu tarafında kilitli havuz varsa:

      1. sunucudaki git deponuza ssh.
      2. Havuzu değiştirme ve sunucunuzdaki depoya gitme izinleri olan kullanıcı olarak oturum açın.
    • Kilitli depo yalnızca yerelse:

      1. Git konsolunu açın ve havuz dizinine gidin.
      2. Bu komutu çalıştırın:

        git update-server-info
        
  2. Gerekirse (uzak veya yerel ve yerel) havuzunuzdaki izinleri düzeltin. Benim durumumda ben gerekiyordu chmodiçin 777ve chownhiçapache:apache

  3. Yerel depodan tekrar zorlamaya çalışın:

    git push
    

7

Benim için böyle çalışır.

  1. sunucunuzdaki Apache DAV kilit dosyasına bakın (örn. / var / lock / apache2 / DAVlock)
  2. silin
  3. web sunucusu için yazma izinleriyle yeniden oluşturun
  4. web sunucusunu yeniden başlat

Daha da hızlı bir alternatif:

  1. sunucunuzdaki Apache DAV kilit dosyasına bakın (örn. / var / lock / apache2 / DAVlock)
  2. Dosyayı boşaltın: cat /dev/null > /var/lock/apache2/DAVlock
  3. web sunucusunu yeniden başlat

Bu benim sorunumdu. Gönderi için teşekkürler. Kaldırmayı ve izinleri tek seferde çalıştırdım. #> rm DAVLock; touch DAVLock; chown www-data.www-data DAVLock; chmod 755 DAVLock; service apache2 restart
djneely

6

Bu bir izin sorunu gibi görünüyor - ayrı haklarla çalışan iki pencereniz açık olabilir mi? Belki de .git klasörünün sahipliğini kontrol edin.

Muhtemelen açık bir dosya kilidi olup olmadığını kontrol edin, belki kontrol etmek için lsof veya işletim sisteminiz için eşdeğerini kullanın.


3

Benim durumumda bir şube bir alt dizine taşındı ve dizin şube olarak çağrıldı. Git bununla karıştı. Yerel dalı sildiğimde (SourceTree'de sadece sağ tıklama ile) her şey her zamanki gibi çalıştı.


3

Benim durumumda bu mesajı aldıktan sonra ödeme komutunu yaptım ve şu mesajı verildi:

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

Bu komutu çalıştırdıktan sonra normale döndüm.



1

(Git işlemi aslında) dosyaya erişiminiz olduğundan .git/info/refsve bu dosyanın başka bir işlem tarafından kilitlenmediğinden emin olun.


2
Bunu nasıl kontrol edersin?
Iulian Onofrei

1

Bu sorun yaşadım, eski dalın adını içeren yeni bir özellik dalı oluşturmaya çalıştığımda, örneğin origin - branch1 ve branch1-özelliği oluşturmak istedim. Bu mümkün değildi, ama branch1 / özelliği zaten vardı.


1

Benim durumumda, uzaktan kumandadan kaldırılan eski etiketleri manuel olarak silmek zorunda kaldım.


1

Benim durumumda, daha önce oluşturduğum şube adıyla bağlantılıydı.

Sorunu çözmek için kesin olarak olmaması gereken bir adla bir şube oluşturdum, örneğin:

git checkout -b some_unknown_branch

Sonra diğer tüm dallarımı temizledim (aktif değil) çünkü sadece gereksiz çöplerdi.

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

ve şu anki şubemi istediğim adla yeniden adlandırdı:

git checkout -m my_desired_branch_name

0

Bettercodes.org durumunda çözüm daha şiirseldir - tek sorun proje üyelerine verilen haklarda olabilir. Basit üyelerin yazma hakları yoktur! Lütfen Moderatör veya Yönetici haklarına sahip olduğunuzdan emin olun. Bunun elbette bir yönetici tarafından proje ayarlarında bettercodes.org adresinde ayarlanması gerekir.


0

git filter-branchBirçok alt dizini yeni, ayrı bir depoya ayırmaya çalışırken bu hatayı gördüm ( bu yanıtta olduğu gibi) ) .

Yukarıdaki çözümlerin hepsini denedim ve hiçbiri işe yaramadı. Sonunda, etiketlerimi yeni dalda kötü bir şekilde korumam gerekmediğine karar verdim ve sadece koştum:

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

0

Tüm kilit ref sorunlarından kurtulmak için yaptığım şey:

git gc --prune=now
git remote prune origin

Bu muhtemelen sadece yapmanız gereken şeydir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.