Próba pobrania polecenia git z błędem: nie można otworzyć .git / FETCH_HEAD: Odmowa dostępu

209

Pomóż mi proszę, próbuję uruchomić to w moim terminalu:

asgard@asgard-A7N8X2-0:~/CollegePortal$ git pull
error: cannot open .git/FETCH_HEAD: Permission denied

Potem próbuję tego

asgard@asgard-A7N8X2-0:~/CollegePortal$ sudo git pull
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

Pomóż mi, nie rozumiem tego problemu.

Artur Jakowlew
źródło
Czy dodałeś swój klucz publiczny do konta github?
madhead
3
Czy masz uprawnienia do zapisu w lokalnym katalogu i plikach, w których próbujesz pobrać? Prawdopodobnie sudonie pomaga tutaj wcale, ponieważ potrzebuje dostępu do twoich kluczy ssh (nie root).
Benjamin Bannier
Miałem ten problem i rozwiązałem go, przyznając mojemu użytkownikowi uprawnienia do modyfikacji i pełnego dostępu do tego folderu (Windows)
Frank

Odpowiedzi:

193

Wygląda na to, że pierwszy nie działa, ponieważ użytkownik nie ma uprawnień do zmiany tego katalogu, a drugi, ponieważ użytkownik root nie ma odpowiednich kluczy SSH do uzyskania dostępu do tego repozytorium git.

W zależności od tego, co próbujesz zrobić, może być lepiej sklonować repozytorium do innego katalogu, a może chowndo bieżącego katalogu, aby mieć pełny dostęp dla użytkownika

abyx
źródło
Mam do czynienia z podobnym problemem i nie jestem pewien, czy mogę udzielić mojemu www-dataużytkownikowi uprawnienia do aktualizacji .gitkatalogu. Wywołuję skrypt powłoki za pomocą php przez http w przeglądarce. Szczegóły tutaj
KillABug
13
Dzieje się tak często, gdy przypadkowo zapominasz, że biegniesz sudo sui działasz jako root w repozytorium. Prosty sudo chown -R <username> .w tym katalogu działa magicznie!
Ray
149

Sprawdź, czy masz wystarczające uprawnienia do .git/katalogu. Powinieneś mieć uprawnienia do zapisu. Możesz ustawić je za pomocą następującego polecenia.

Przejdź do folderu projektu:

chown -R youruser:yourgroup .git/
René Höhle
źródło
1
To daje michown: youruser: Invalid argument
zakdances
43
Powinno byćchown -R youruser .git/
zmiksuj
1
Musiałem chown .git/i jego folder nadrzędny, aby to działało
zadubz
Wydaje się, że to bardzo częsty problem. Ok, jeśli pracujesz z innym użytkownikiem, a coś innego użytkownika zmieniło twoje uprawnienia, jest to trochę trudne.
René Höhle,
Jeśli chownnie działa, uruchom także to poleceniesudo chmod 0777 -R .git/
Kiran
48

Jeśli chcesz zezwolić grupie,

sudo chmod g+w .git -R

działało najlepiej dla mnie.

W systemie MacOS

sudo chmod -R g+w .git 
Zwycięstwo Jun Bae
źródło
29

Jest to problem z uprawnieniami UNIX. Nie używaj sudodo klonowania repozytorium. Nie masz takich samych kluczy ssh jak root i i tak nie powinieneś pracować jako root. Spróbuj ls -laznaleźć uprawnienia do plików i użyj chmod(lub sudo chown), aby je naprawić. Mam nadzieję, że to pomaga.

Johannes Thoma
źródło
Dokładnie to! Natknąłem się na ten problem, ponieważ musiałem to zrobić sudo clone, aby zaakceptować nową umowę licencyjną XCode. Odpowiedzią jest zaakceptowanie umowy, a następnie sklonowanie bez sudo.
Barnaby
24

W moim przypadku działa dobrze po tym:

rm -f .git/FETCH_HEAD

git branch -u
Shilovk
źródło
1
To zadziałało również dla mnie w tej konkretnej sprawie .
P. Mergey
Dla mnie było to również rozwiązanie. Dziękujemy za tę opcję rozwiązania.
Francisco Maria Calisto
21

W odpowiedzi na ten problem upewnij się, że .git / FETCH_HEAD ma uprawnienia do zapisu i wszystko będzie gotowe.

Miałem ten problem w systemie Windows i został rozwiązany przez udzielenie uprawnień do zapisu.

W unixie można uruchomić chmod a+rw .git/FETCH_HEADz repozytorium projektu, po którym powinien działać.

pg2286
źródło
nie działa .git/FETCH_HEADsam, jeśli problem z uprawnieniami jest włączony .git.
Cœur
17

Spróbuj w ten sposób,

Krok 1: Najpierw sprawdź, kim jesteś? zwróci bieżącą nazwę użytkownika, np. ubuntu

$ whoami 

Krok 2: Następnie ustaw uprawnienia dla bieżącego użytkownika, w tym przypadku ubuntu przez

sudo chown -R ubuntu .git/
Zawsze słonecznie
źródło
to działa dla mnie podczas instalacji dyskursu na Amazon lightail ubuntu
Jide
11

W moim przypadku miałem dostęp tylko do odczytu do pliku .git / FETCH_HEAD. Musiałem zrobić „sudo chmod g + w .git / FETCH_HEAD”, aby móc wykonać polecenie ściągnięcia.

Promień
źródło
nie działa .git/FETCH_HEADsam, jeśli problem z uprawnieniami jest włączony .git.
Cœur
Musiałem zezwolić na dostęp do zapisu w folderze git dla grupysudo chmod g+w .git/FETCH_HEAD
William
sudo chmod g+w .git/FETCH_HEAD, idealne rozwiązanie.
Rishi Kulshreshtha
9

Miałem pierwszy problem (odmowa dostępu FETCH_HEAD) w systemie Windows.

Naprawiłem to, uruchamiając Git Bash jako administrator (kliknij prawym przyciskiem myszy, uruchom jako administrator).

Nicholas Westby
źródło
9

Jeśli nie dodałeś się do grupy, która jest właścicielem .git/, powinieneś.

sudo usermod -a -G $(stat -c '%G' .git) $USER
sudo chmod g+u .git -R
sudo chmod g+u .gitignore
su - $USER

Co to robi:

  1. sprawdza, która grupa jest właścicielem .git/i dodaje użytkownika do tej grupy.
  2. upewnia się, że członkowie grupy mają takie same uprawnienia jak właściciel .git/.
  3. powtarza to .gitignore, co prawdopodobnie będzie potrzebne
  4. wylogowuje Cię i ponownie loguje, aby odświeżyć uprawnienia do pliku członkostwa w grupie

Jeśli niedawno zrobiłeś coś takiego (dodałeś się do grupy, która jest właścicielem .git/), musisz się wylogować i zalogować ponownie, zanim będziesz mógł pisać .git/FETCH_HEADw swoim czasie git pull.

płyty grzewcze
źródło
7

Ustaw uprawnienia dla bieżącego użytkownika, uruchamiając polecenie

$ sudo chown -R <username> .git/

Shivam Kohli
źródło
6

Po prostu przejdź do folderu głównego i uruchom następujące polecenie:

chmod a+rw .git/FETCH_HEAD
Suvajit Chakraborty
źródło
4

Gdy korzystałem z systemu Windows 7, miałem ten problem, ponieważ ukryłem folder .git. Uprawnienia były w porządku, po prostu były ukryte. Wyświetlanie folderu rozwiązało go.

jdf
źródło
Ukryty katalog, kto by chciał.
Ian Newland
4

To rozwiąże wszystkie uprawnienia w folderze

sudo chown -R $(whoami) ./
Pablo Papalardo
źródło
3

To działało dla mnie:

  1. Kliknij prawym przyciskiem myszy folder .git
  2. kliknij, aby uzyskać informacje
  3. ustaw uprawnienia dla swojego użytkownika
  4. kliknij ikonę koła zębatego i kliknij Zastosuj do zamkniętych elementów

Żadne więcej uprawnień nie odmawia błędów w git. 🎉

eonista
źródło
2

Spójrz na właściciela i grupę .gitkatalogu za pomocą (najpierw przejdź do katalogu nadrzędnego .git) ll .git, spójrz na grupę i właściciela katalogu, dodaj użytkownika do grupy właściciela za pomocąsudo usermod -a -G yourusername groupsofonwner , a następnie wyloguj => zaloguj się i wszystko zaczyna działać .

Tak w lecie

  1. przejdź do katalogu nadrzędnego git

    $cd your path
    
  2. znajdź właściciela grupy .gitdirecotry

    $ll .git     
    
  3. dodaj użytkownika do tej grupy

    $usermod -a -G yourusername ownergroupofgit
    
  4. Wyloguj się i zaloguj do systemu, aby ta zmiana zaczęła obowiązywać.

  5. Ciesz się;)

Yuseferi
źródło
2

Ten problem występuje, gdy folder .git jest ukryty, a wszystkie pliki w nim również ukryte. Zrób tylko ukryty folder .git bez aktualizacji plików rekurencyjnych i będzie działać.

Oleg Dmitriew
źródło
2

Przyczyny tego błędu mogą być wielokrotne, ale w moim przypadku zaktualizowałem gałąź rootem, a kiedy próbowałem zaktualizować ją zwykłym użytkownikiem, pojawia się błąd.

wypróbuj oba rozwiązania, które powinny Ci pomóc

1- sudo chmod g+w .git -R

jeśli to nie zadziała, wypróbuj następne rozwiązanie, mając nadzieję, że rozwiąże Twój problem

2 - rm -f .git/FETCH_HEAD
Shahbaz
źródło
1

Miałem tę wiadomość, gdy korzystałem z rozszerzeń git dla systemu Windows. Moim rozwiązaniem było po prostu zamknięcie rozszerzeń git, a następnie ponowne otwarcie jako administrator

Rob Bowman
źródło
1

W moim przypadku,

sudo chmod ug + wx .git -R

to polecenie działa.

narwanimonish
źródło
1

Ten problem występuje, gdy nie dajesz wystarczających uprawnień do folderu .git. By rozwiązać ten problem-

  1. Najpierw przejdź do katalogu roboczego.
  2. Wpisz to polecenie

    sudo chmod a + rw .git -R

Mam nadzieję, że to pomoże..!!

Nakshtra Pradhan
źródło
1

Miałem dokładnie ten sam błąd, ale w moim przypadku problem polegał na przebudowaniu Apache po aktualizacji do wersji PHP. Krótko mówiąc, zapomniałem zainstalować moduł Apache „suexec”.

Nie miało to nic wspólnego z grupą ani własnością. Dopiero po dwóch dniach zrozumiałem, że ktoś mnie zastrzelił ...

Vince
źródło
1

W moim przypadku miałem system podwójnego rozruchu (Windows 10 i Linux) z folderem projektu na dysku NTFS. Okazało się, że na innej aktualizacji system Windows 10 sam w sobie włącza „szybkie uruchomienie” w swoich ustawieniach. Po odznaczeniu go w systemie Windows zniknął „błąd: nie można otworzyć .git / FETCH_HEAD: Odmowa uprawnień” w systemie Linux.

ysvet
źródło
0

Dostałem to, ponieważ miałem na swoim koncie więcej niż 1 konto użytkownika. Byłem zalogowany jako użytkownik A i byłem w katalogu dla użytkownika B. Użytkownik A nie miał uprawnień do rzeczy użytkownika B. Kiedy zdałem sobie sprawę, że nie jestem tam, gdzie myślałem, że jestem w systemie plików, ten błąd miał sens.

thebiggestlebowski
źródło
0

jeśli znajdziesz ten sam problem na serwerze Windows, musisz uruchomić wiersz poleceń z wystarczającą liczbą uprawnień, takich jak uprawnienia administratora.

aaron
źródło
0

dla użytkowników MacOS (jeśli High Sierra lub wyższa wersja) użyj tego:

sudo chown -R $(whoami) $(brew --prefix)/*
rony36
źródło
-1

TL; DR: W systemach podwójnego rozruchu wyłącz Fast Startup dla Windows

Miałem ten problem w moim systemie Ubuntu / Windows z podwójnym uruchomieniem. Nie mogłem napisać niczego na żadnej z partycji współdzielonych z Windows (partycje NTFS).

Niedawno ponownie zainstalowałem oba programy i zapomniałem wyłączyć „Szybkie uruchamianie” w systemie Windows. Wszystko wróciło do normy po ponownym uruchomieniu w systemie Windows, wyłączeniu tej funkcji i ponownym uruchomieniu.

numan947
źródło
-1

W moim przypadku działa to tak: Właśnie napisałem sudoprzed poleceniem:

sudo npm run deploy
Андрей Пахомов
źródło