Git Checkout uyarısı: dosyaların bağlantısı kaldırılamıyor, izin reddedildi


109

Git ile ilgili 'bağlantı kesilemiyor' uyarısıyla ilgili benzer sorunlar olduğunun farkındayım, ancak bunları kullanamadım.

Temel fark, bunun alt modüller ile hiçbir şekilde uğraşmadığım zamanlarda gerçekleşmesidir (daha önce onlarla hiç ilgilenmedim). 'Yükseltme' adında bir dal oluşturdum, eski çerçeve dosyalarımı sildim ve yenilerini kopyaladım. Git add -A kullandım, sonra her şeyi işledim. Ana şubeyi kontrol etmeye çalıştığımda, aşağıdaki hatalarla yanıt verdi:

warning: unable to unlink requirements/views/sk/index.php: Permission denied
warning: unable to unlink requirements/views/sv/index.php: Permission denied
warning: unable to unlink requirements/views/zh/index.php: Permission denied
warning: unable to unlink requirements/views/zh_cn/index.php: Permission denied
warning: unable to unlink requirements/views/zh_tw/index.php: Permission denied

...vb. Yüzlerce var.

İlk başta bunun sadece bir izin sorunu olduğunu düşündüm ve bu yüzden tüm gereksinimler dizinine yinelemeli olarak grup yazma izinleri ekledim, ancak değişiklik olmadı.

Düzenleme: Aşağıda bir cevapta önerildiği gibi, aynı şeyi yapmaya çalıştım ama diğer her şey kapalıyken. Daha önce hiç şansım olmadı.

Normal gelişime geri dönmek için bagaja geçemediğim için bu sorun özellikle zayıflatıcı.



9
Bunu basit bir şekilde sudo chown -R username directory
çözdüm

Yanıtlar:


84

Bu dosyaların tanıtıcısını bırakmayan bir işlem olduğunda genellikle bu tür bir hata görüyorum.

Hiçbir şeyin çalışmadığından emin olun ve ardından kontrolünüzü tekrar deneyin.

Not: Git'in kurulma şekli ile de ilişkili olabilir (Windows'ta, msysgit kuruluysa UAC sorun oluşturabilir C:\Programveya C:\Program Filesbkz. " Msysgit - sh.exe - fork: İzin reddedildi - Vista 64 bit " ve yorum 2 sorunu 437 )

Not: Aşağıda gösterildiği gibi , sorunun diğer yaygın bir nedeni, dizindeki haklar sorunudur (yanlış sahip), ille de bağlantısı kaldırılamayan dosyada değil.


1
Bunu temizlemek için Ubuntu'dayım. Ve maalesef sadece bu web tarayıcısındayım ve ilgili dizine bir sekme açık (ve ikisi tamamen başka bir yerde açık) olan konsolumdayım.
Paragon

3
@Paragon: Unix'te bile sorunların üstesinden gelebilirsiniz. Aksi takdirde, bu bir tür izin sorunu olmalıdır. Yine de ödemeyi zorlayabilmelisiniz. git checkout -f master
VonC

2
Benim durumumda +1, ana sistemde git'deki dosyaların silinmesini yasaklayan etkin bir VM ile klasör paylaşımı idi. Beni çıldırttı, ipucu için teşekkürler!
Jook

1
Aynı sorun. İşlem Gezgini'ni Çalıştırma> Ctrl + F> <dosya adı> - bu dosyanın açık kalmasını sağlayan işlemi görüntüler.
setevoy

1
GitExtensions, hepsini almaya çalışırken bu hatayı görüntüledi ... Ayrıca GitKraken'ı da açtım. GitKraken'i kapattıktan sonra getirme işleminin tümü hatasız çalıştı.
mkaj

99

Bu hatayla ilk karşılaşmamda, kullanıcım dosyaya "yazma" hakkına sahipti, ancak içeren dizine sahip değildi. Dosyayı içeren dizinin izinlerini kontrol edin.


95
Aman tanrım, çok komik, bugün bu cevaba rastladım ve sonra cevabın bana ait olduğunu anladım! Yine de tekrar çalıştı!
Elijah Lynn

Tamam, Windows 10'da başıma geldi, ana proje klasörüne gidiyorum. ve TÜM OLASI KULLANICILAR İÇİN tüm izinleri ekleyin. Yani sistem, yönetici, kullanıcılar, tüm olasılıklar için. Chnage uygulayın. Ve işe yarıyor gibi görünüyor, bir şekilde belki Windows 10 güncellemesiyle, yeni kullanıcı oluşturmasak bile, yeni kullanıcı gibi izinler olmadan tehdit ediliyoruz. Örneğin, S-1-15-32 gibi garip bir ismim var ..... Dizüstü bilgisayarımızın kilidini açtığımızda sahip olduğum oturum açma adı değil.
PsychedelicSubstance

30

Bu durumda "Bağlantıyı kaldır", esasen "dosyayı sil" anlamına gelir.

Bu hata git'in kendisinden kaynaklanmaz. Bu dosyaları bir komut satırında veya dosya gezgininde manuel olarak silerken benzer hatalarınız olmalıdır.


18
Bu hatayla ilk karşılaşmamda, kullanıcım dosyaya "yazma" hakkına sahipti, ancak içeren dizin yoktu.
Elijah Lynn

3
@Elijah: Teşekkürler! Benim için buydu.
Jesse Lee

4
Benim durumumda, söz konusu dosyanın başka bir uygulama tarafından kilitlendiğini buldum. Uygulamanın kapatılması dosyayı serbest bıraktı ve teslim alma işleminin devam etmesine izin verdi.
Simon Tewsi

25

Erişim izniniz yok, belki de sahibi olmadığınız için.

Sahibini kendinize değiştirerek düzeltin:

sudo chown -R your_login_name /path/to/folder

2
Yerel geliştirme makinemde, söz konusu dosyalar orijinal olarak yerel apache sunucum tarafından oluşturulmuştu, bu nedenle de www-data kullanıcısına aitti. Onları kendi hesabıma seçtikten sonra, her şey normal şekilde tekrar çalıştı. Asıl mesele "İzin Reddedildi" idi. "Sevememek" sadece kırmızı bir ringa balığıydı.
Dale Anderson

23

Drupal 7'de bir default-settings.php dosyasıyla ilgili sorun yaşıyordum. Bu durumda onu silemedim veya @rtconner'ın dediği gibi geri döndüremedim. Bu dosyayı kullanan bir uygulamam veya herhangi bir şeyim yoktu ve bu bir izin hatası oldu.

chmod 777 *Klasöre ekledim ve sonra sorun olmadan geri döndürebildim.


3
777Herhangi bir klasörde istemeyebilirsiniz . Bu, sorunumu çözdü, ancak çözüldükten sonra hızla varsayılana geri döndürdüm. Teşekkürler!
Bram

13

Bunu yapmak için yazma izinlerini değiştirebilirsiniz.

sudo chmod -R ug+w . 

Bu komut 'w', geçerli dizindeki tüm klasörlere izin verecektir .


6

Yönetici ayrıcalıklarıyla git çalıştırırken bile OS X makinelerimde "git repack" veya "git gc" çalıştırdığımda bu sorunla karşılaştım ve sonunda bu sayfaya geldikten sonra çözdüm : http://hints.macworld.com /comment.php?mode=view&cid=1734

Düzeltme, bir terminal açmak, git deponuza gitmek, .git klasörüne cd yapmak ve ardından şunları yapmaktır:

chflags -R nouchg *

Sorun buysa, bundan sonra git komutlarınız normal şekilde çalışacaktır.


1
Macworld bağlantısı artık geçerli değil. İşte güncellenmiş bir ref: superuser.com/a/40754
webb

5

Bu, şu durumlarda da ortaya çıkabilir:

  1. Bir Docker kapsayıcısının içinde bir işlem çalıştırdınız ve:

  2. Bu işlemle bazı dosyalar oluşturuldu ve:

  3. Dosyaların hedefi Docker ana bilgisayarına bir birim olarak bağlanır ve:

  4. gitDocker ana bilgisayarında çalıştırıyorsunuz .


Bu durumda, uygulamak istediğiniz dosyaları hazırlayın ve çalıştırın:

git diff --name-only --cached | xargs ls -l 

Yukarıdaki kriterleri karşılayan dosyaların önüne şu şekilde eklenir:

-rw-r--r-- 1 root root ...

Sahip oldukları rootve yazılamazlar ki bu iyi değil. Bu çalışmayı düzeltmek için:

 git diff --name-only --cached | xargs -i sh -c 'sudo chown $USER:$USER {}; chmod +w {}'

Daha temiz bir çözüm muhtemelen --userseçeneği kullanmak olacaktır , bunu Docker için ve Docker compose için buna bakın .


4

Intellij kullananlara , @rtconner'ın söylediği gibi, bu soruna git neden olmuyor. IDE'niz kilitlendiğinden, git bir dosya (lar) onu kaldıramaz. Bu nedenle, IDE'nizi kapatmanız ve ardından komut satırı aracılığıyla birleştirmeyi (veya ne isterseniz) denemeniz gerekir.


İşte buydu. AndroidStudio Intellij olduğu için Android Geliştirme ile gerçekleşti.
Reinherd

2

Benim durumumda, git repo'nun Windows'ta kullanıma alınmasını engelleyen klasör adında bir ":" karakteriydi.


2

Mac'teki terminalde sadece bunu yapıyorum

sudo git ödeme. (her şeyi temizlemek için)

ve sonra

sudo git çekme kaynağı


2

Yapmaya çalıştığımda bu hatayı sanal bir makinede (Ubuntu çalıştıran) aldım git reset --hard.

Düzeltme, git reset --hardbunun yerine OS X ana makinesinden çalıştırılmaktı .


1

Diğer önerilerin hiçbiri benim için işe yaramadı, ancak bu işe yaradı:

sudo git reflog expire --expire=now --all && sudo git gc --prune=now --aggressive


1

Benim durumumda, Windows dizinim Dropbox klasörünün altında. Git'e özgü bir sorun değildir. Bir dosya (bu durumda, kilit dosyası) henüz oluşturulduğunda, eşitlemeyi yapmak için Dropbox bir saniye daha sürer. Bu süre boyunca, dosya Dropbox tarafından kullanılıyor ve herhangi bir 3. parti program (bu durumda Git) dosyayı silemez.

Benim çözümüm Dropbox'tan çıkmak ve bu nedenle Dropbox'ın dosya senkronizasyonunun perde arkasındaki sihrinden kaçınmak.


0

Ben bu hatayı karşılaştı ve yanlış neden olur "sahibi / grubun" bir dosya / klasör . Bu dosyanın / klasörün "sahibini / grubunu" değiştirmek için sunucu yöneticinizden yardım istemeli ve "git pull" kullanmayı yeniden denemelisiniz. Veya bir sudoer iseniz, sadece sudo chown "sahip adınız / grup adınız" ve deponuzu yeniden çekmeyi deneyin. Deneyin, benim için% 100 çalışıyor!


0

Herhangi bir ilişkili işlemin veya iş parçacığının çalışmadığından emin olun ve gerektiğinde son görevi gerçekleştirin veya çıkmaya zorlayın.

Sahiplik iznini değiştirdiğinizden emin olun.


0

Bu olursa sadece genel olarak Windows'un ve kullandığınız tortoisegit , bu durumu önbelleğidir tortoisegit . Bu süreci öldürün ve serbest kalsın.


Aslında TortoiseGit'in durum önbelleğini tamamen devre dışı bırakabilirsiniz ve bu genellikle tavsiye edeceğim bir şeydir. Genellikle birçok beklenmedik dosya kilidinin nedenidir ve çok daha fazla sorun olma eğilimindedir, o zaman buna değer. Bunun git statusyerine komut satırından kullanın.

0

Kullanıcıyı ubuntu'dan, ilk önce yaptığım gerçek kullanıcı adıma geçirmek zorunda kaldım. Bu onu düzeltti.


peki ya windows kullanıcıları?
Herr Nentu '

OP Ubuntu'daydı. Bir Windows iş parçacığına yorum yapmazdım.
Marc

0

Git istemcimi (GitExtensions) her zaman yönetici modunda çalışacak şekilde ayarlayarak benim için çözüldü.


0

IntelliJ(14.1.3 Ultimate) kullanırken bu sorunu yaşadım, bazı dosyalarda değişiklikleri geri almak istedim.

Git BashBaşka bir pencerede açılan kapatarak çözüldü - başka bir geri alma denemesi IntelliJçalıştı.


0

Bu hatayla karşılaştım ve sanırım Eclipse'i başlattığımda ve dosyaları oluşturduğumda 'yönetici olarak çalıştırdığım', bu nedenle Admin'e aitti (klasörde 'ls -la' çalıştırılarak fark edildi). Daha sonra dosyaları saklamaya çalıştığımda, bana izin vermedi ('dosyaların bağlantısını kaldıramadım' falan). Dosyalarda bir chmod yapmak benim için düzeltmeydi.



0

Tek yapmanız gereken izinler sağlamak, aşağıdaki komutu projenizin kök dizininden çalıştırın:

    chmod ug+w <directory path>

0

Aynı sorunu yaşadım, diğerlerinin önerdiği gibi birkaç alternatif denedim.

Ama nihayet .git klasörüne doğru izin vererek sorunları çöz.

sudo chown -R "${USER:-$(id -un)}" .git

0

Benim durumumda izin sorunu www-data, sahip olarak ayarlanarak çözüldü :

chown -R www-data project_folder_name

0

Sanırım dosya izninizle ilgili:

sudo chmod 777 -R <your-git-folder>
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.