Git push hatası: Eski bağlantı kaldırılamıyor (İzin reddedildi)


192

Uzak sunucuda, depomun git kontrolünü yapmak için ayarlanmış bir kanca var:

#!/bin/sh
GIT_WORK_TREE=/var/www/<website> git checkout -f

Ancak yerel makinemden sunucudaki git deposuna bir itme yaptığımda, aşağıdaki hata iletilerini alıyorum:

remote: error: unable to unlink old '<file>' (Permission denied)

Bu, neredeyse her dosya için bir hata mesajı olarak birçok kez görünür.

Ancak git kullanarak değiştirebildiğim bir README.txt dosyası var, işte onun izinleri:

-rw-r--r--  1 <serverusername>  <serverusername>  2939 Aug  2 10:58 README.txt

Ancak tam olarak aynı sahibi ve izinleri olan diğer dosyalar bana bu hatayı veriyor.

Başka bir web sitesi için başka bir yerel depoda, yerel makine kullanıcı adımla sahip olarak dosyalara sahibim ve uzak sunucuya bastığımda dosyaların uzak sunucu sahibine saygı duyuyor ve cazibe gibi çalışıyor.

Açıkçası izinlerle ilgili bir hata gibi görünüyor, ancak bunu düzeltmenin bir yolunu bulamıyorum, herhangi bir öneri?

Yanıtlar:


336

Dosya bağlantısını kaldırmanız gerektiğinde, dosya için değil, dosya olduğu dizin için 'w' iznine sahip olmanız gerekir ...


65
Gerçekten de sorun sudo chmod -R g+wbuydu, suçlu klasörleri kullanarak düzelttim .
rfc1484

1
OMG teşekkürler. Dosya üzerinde doğru olduğunu düşünme izinleri ile çok rahatsız oldu. Güncellemelerin aslında mvüzerine yazmaktan ziyade eylemlere benzediği anlaşılıyor.
doublejosh

1
Dir izinlerini değiştirmek benim için işe yaradı (teşekkürler!) Ama garip çünkü elle herhangi bir sorun olmadan sftp aracılığıyla söz konusu dosyaların üzerine yazabilirsiniz. Git aynısını yapmaya çalıştığında tutamayacağından garip.
Jonathan Stark

1
Ayrıca, dosyayı hala açtıysanız bu hatanın da görüneceğini unutmayın. Aynı hatayla karşılaştım ve bu yüzden değişikliklerimi
Matias

1
Ekranın ilk karakteri ls -ldosya türünü gösterir ve izinlerle ilgili değildir. Kalan dokuz karakter, her biri üç karakter olarak bir izin sınıfını temsil eden üç kümede bulunur. İlk küme kullanıcı sınıfını temsil eder. İkinci küme grup sınıfını temsil eder. Üçüncü küme diğerleri sınıfını temsil eder. g+wChmod grup kümesi (verir gyazma (parametre) izni wparametresi)
rfc1484


42

Herhangi bir IDE kullanıyorsanız, büyük olasılıkla sorun dosya bazı işlem tarafından kullanılmış olmasıdır. Tomcat'iniz dosyayı kullanıyor olabilir. Belirli bir süreci belirlemeye ve kapatmaya çalışın. Bu, sorunu çözmeli.


13

Aynı sorunu yaşadım ve yukarıdaki çözümlerin hiçbiri benim için işe yaramadı. Sorunlu klasörü sildim. Sonra:

git reset --hard

Git durumunu temizlemek için kalan dosyaları sildi, sonra yaptı:

git pull

Sonunda işe yaradı.

NOT: Klasör, örneğin, yapı dosyalarını içeren bir ortak klasörse, dosyaları yeniden oluşturmayı unutmayın


Teşekkürler, benim için başka hiçbir şey işe yaramıyordu, onu silmek tek seçenek gibi görünüyordu.
math0ne

Benim durumumda, rahatsız edici klasör .git
Tushar Kathuria

13

Sorunun klasörün sahipliğiyle ilgili olabileceğini düşünüyorum, bu yüzden mevcut kullanıcı sahipliğine ayarlayın

sudo chown -R your_login_name /path/to/folder
Çözümü [burada] bulabilirsiniz [1]

8

FWIW - Benzer bir sorunum vardı ve bunun (izin modunun ötesinde) hafifletip hafifletmediğinden emin değilim: Bu sorunla dalı kullanan Eclipse'i kapatma.


Benzer şekilde, Excel'de sürüm kontrollü bir CSV dosyası açıkken bu hatayı aldım. Sadece Excel'i kapatmak sorunu çözdü. Bu muhtemelen pencerelerdeki diğer uygulamalar için de geçerlidir ve muhtemelen programın dosyayı düzenleme sırasında nasıl açık olarak işaretlediğine bağlıdır.
Carel

4

Bu eski bir soru, ancak bu Mac kullanıcılarına yardımcı olabilir.

Dosyaları Time Machine'den geri yüklemek yerine Time Machine'den manuel olarak kopyalıyorsanız, ACL'ler ekleyecektir her şeye , bu da izinlerinizi bozabilir.

Örneğin, bu makalede "Mac OS X Dosya İzinleri Nasıl Onarılır" bölümü , "herkes" in özel izinlere sahip olduğunu gösterir.

Http://dreamlight.com/how-to-fix-mac-os-x-file-permissions adresinden hatalı izinler

ACL'leri bu dizinlerden / dosyalardan kaldırmanız gerekir. Bu Süper Kullanıcı yanıtı giriyor, ama işte komut:

sudo chmod -RN .

Sonra dizinlerinizin ve dosyalarınızın uygun izinlere sahip olduğundan emin olabilirsiniz. Kullandığım 750dizinlerinin ve 644dosyalar için.


3

(Intellij içinde) çalışan bir sunucu olduğunda bu hatayı ve diğer garip git hataları alıyorum. Sunucunun durdurulması ve git komutunun yeniden denenmesi sık sık benim için düzeltiyor.


3
git reset --hard

Benim için çalıştı


4
Çok daha fazlasını yaptığı için bu biraz aşırı olabilir.
cdaddr

3
sudo chown -R $USER:$USER .

İşi benim için yaptı.


2

Çekme yerel bir değişiklik yaratmış olabilir.

İzlenmeyen dosyanızı ekleyin:

git ekleyin.

Stash değişiklikleri.

git stash

Yerel değişiklikleri bırakın.

git saklamak

Sudo izniyle çekin

sudo git uzak dalı çek


tüm yerel dosyaların izni hakkında git ile ilgisi yok sadece sudo ile komut çalıştırdım ve bu yüzden tüm bu adımları gerektirmedi çalıştı
raviramani

Benim için çalışacak tek şey buydu.
Eric

2

Bazı dosyalar yazmaya karşı korumalıdır, git bile üzerine yazamaz. Yazmaya izin vermek için klasör iznini değiştirin, örneğin sudo chmod 775 foldername

Ve sonra

git pull 

tekrar


1

Ayrıca kök dizinin kendisinin iznini kontrol etmeyi unutmayın!

Bulabilirsin:

drwxr-xr-x  9 not-you www-data  4096 Aug  8 16:36 ./
-rw-r--r--  1     you www-data  3012 Aug  8 16:36 README.txt
-rw-r--r--  1     you www-data  3012 Aug  8 16:36 UPDATE.txt

ve 'izin reddedildi' hatası açılır.

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.