Kiedy próbuję przekazać na udostępnionego zdalnego git, pojawia się następujący błąd:
insufficient permission for adding an object to repository database
Potem przeczytałem o poprawce tutaj: Poprawka Działało to przy następnym wypychaniu, ponieważ wszystkie pliki należały do właściwej grupy, ale następnym razem, gdy ktoś podniósł zmianę, utworzył nowy element w folderze obiektów, który miał ich domyślną grupę jako grupa. Jedyne, co mogę wymyślić, to zmienić całą domyślną grupę programisty dla przedmiotów, które rejestrują, ale to wydaje się być włamaniem. Jakieś pomysły? Dzięki.
git add
igit commit
-ing jako użytkownik root. Naprawiłem to z odpowiedzią nagit reset
to pytanie, aby naprawić.git
uprawnienia do katalogu.Odpowiedzi:
Uprawnienia do naprawy
Po zidentyfikowaniu i naprawieniu podstawowej przyczyny (patrz poniżej), będziesz chciał naprawić uprawnienia:
Uwaga: jeśli chcesz, aby wszyscy mogli modyfikować repozytorium, nie potrzebujesz
chgrp
i będziesz chciał zmienić chmod nasudo chmod -R a+rwX .
Jeśli nie naprawisz przyczyny, błąd będzie się powtarzał i będziesz musiał ponownie uruchamiać powyższe polecenia w kółko.
Przyczyny leżące u podstaw
Błąd może być spowodowany jedną z następujących przyczyn:
Repozytorium nie jest skonfigurowane jako repozytorium współdzielone (patrz
core.sharedRepository
wgit help config
). Jeżeli wynik:nie jest
group
lubtrue
lub1
lub niektóre maski, spróbuj uruchomić:a następnie ponownie uruchom rekurencyjne
chmod
ichgrp
(patrz „Napraw uprawnienia” powyżej).System operacyjny nie interpretuje bitu setgid w katalogach jako „wszystkie nowe pliki i podkatalogi powinny dziedziczyć właściciela grupy”.
Kiedy
core.sharedRepository
jesttrue
lubgroup
, Git korzysta z funkcji systemów operacyjnych GNU (np. Każdej dystrybucji Linuksa), aby mieć pewność, że nowo utworzone podkatalogi są własnością właściwej grupy (grupy, w której znajdują się wszyscy użytkownicy repozytorium). Ta funkcja jest udokumentowana w dokumentacji GNU coreutils :Jednak nie wszystkie systemy operacyjne mają tę funkcję (jednym przykładem jest NetBSD). W przypadku tych systemów operacyjnych należy upewnić się, że wszyscy użytkownicy Git mają tę samą grupę domyślną. Alternatywnie możesz sprawić, aby repozytorium było zapisywane na całym świecie, uruchamiając
git config core.sharedRepository world
(ale bądź ostrożny - jest to mniej bezpieczne).źródło
false
lubumask
). Zobaczgit help config
po więcej szczegółów.git push
za pomocą konta root w moim katalogu roboczym. Odkryłem, że właścicielem niektórych plików repozytorium git jest root (-r--r--r--. 1 root root 6380 5月 25 12:39 9b44bd22f81b9a8d0a244fd16f7787a1b1d424
) zgodnie z tą odpowiedzią.X
litera, a nie małe literyx
. WielkaX
oznacza „ustaw,S_IXGRP
jeśli plik jest katalogiem (lub jeśliS_IX*
ustawiony jest inny bit)”, więc nie sprawi, że wszystkie pliki będą wykonalne. Może to być niepotrzebne, ale może nie, jeśli w przeszłościcore.sharedRepository
było to ustawione0600
.W systemie Ubuntu (lub dowolnym systemie Linux)
Z katalogu głównego projektu
Możesz powiedzieć, jaka powinna być twoja nazwa i twoja grupa, patrząc na uprawnienia do większości danych wyjściowych tej komendy ls -al
Uwaga: pamiętaj gwiazdę na końcu linii sudo
źródło
Sorry, user myuser is not allowed to execute '/bin/chown
*
Wykonana cała różnica. Dzięki.ls .git
użyj następującego polecenia, działa jak magia
wpisz polecenie dokładnie tak, jak jest (z dodatkowymi spacjami i jedną kropką na końcu)
źródło
sudo chmod -R ug+w .;
Zasadniczo
.git/objects
plik nie ma uprawnień do zapisu. Powyższa linia uprawnia do wszystkich plików i folderów w katalogu.źródło
Chciałem tylko dodać moje rozwiązanie. Miałem repozytorium w systemie OS X, które posiadało root w niektórych katalogach, a Home (który jest moim katalogiem użytkownika) w innych, które spowodowały ten sam błąd wymieniony powyżej.
Na szczęście rozwiązanie było proste. Z terminala:
źródło
Dobrym sposobem na debugowanie jest to, kiedy następnym razem się zdarzy, SSH do zdalnego repozytorium, cd do folderu obiektów i wykonaj
ls -al
.Jeśli zobaczysz 2-3 pliki z innym użytkownikiem: własność grupy niż to jest problem.
W przeszłości zdarzało mi się, że niektóre starsze skrypty mają dostęp do naszego repozytorium git i zwykle oznacza, że inny (uniksowy) użytkownik pchnął / zmodyfikował pliki jako ostatni, a użytkownik nie ma uprawnień do nadpisywania tych plików. Należy stworzyć wspólną grupę git, że wszyscy użytkownicy git-włączone są i następnie rekurencyjnie Folder i jego zawartość tak, że jest to własność wspólna grupa jest grupą.
chgrp
objects
git
Powinieneś także dodać lepki bit do folderu, aby wszystkie pliki utworzone w folderze zawsze miały grupę
git
.Aktualizacja: Nie wiedziałem o core.sharedRepository. Dobrze wiedzieć, choć prawdopodobnie robi to tylko powyższe.
źródło
Rozwiązane dla mnie ... właśnie to:
źródło
Chmod 777
nie jest zalecane, ponieważ udostępnia cały plik reszcie świata, narażając maszynę na niebezpieczeństwochmod 777
: 99 razy na 100 nie rozumiesz problemu i prawdopodobnie spowodujesz więcej problemów niż pomożesz rozwiązać. Jak pokazuje powyższa zaakceptowana odpowiedź, problem ten nie różni się.Może się to łatwo zdarzyć, jeśli działałeś
git init
z innym użytkownikiem niż ten, którego planujesz użyć podczas wypychania zmian.Jeśli ślepo zastosujesz się do instrukcji na [1], stanie się tak, ponieważ prawdopodobnie utworzyłeś użytkownika git jako root, a następnie natychmiast przeszedłeś do git init bez zmiany użytkownika pomiędzy.
[1] http://git-scm.com/book/en/Git-on-the-Server-Setting-Up-the-Server
źródło
Linux, macOS:
gdzie
name
jest twoja nazwa użytkownika igroup
grupa, do której należy twoja nazwa użytkownika.źródło
Po dodaniu niektórych elementów ... zatwierdź je, a potem gotowe! HUK!! Zacznij wszystkie problemy ... Jak zauważyłeś, istnieją pewne różnice w sposobie definiowania zarówno nowych, jak i istniejących projektów. Jeśli jakaś inna osoba spróbuje dodać / zatwierdzić / wypchnąć te same pliki lub treść (git zachowuje oba jako te same obiekty), napotkamy następujący błąd:
Aby rozwiązać ten problem, musisz mieć na uwadze system uprawnień systemu operacyjnego, ponieważ w tym przypadku jesteś przez niego ograniczony. Aby lepiej zrozumieć problem, sprawdź folder git (.git / objects). Prawdopodobnie zobaczysz coś takiego:
* Pamiętaj, że uprawnienia do tych plików zostały przyznane tylko dla twoich użytkowników, nikt nigdy nie będzie mógł go zmienić ... *
ROZWIĄZYWANIE PROBLEMU
Jeśli masz uprawnienia superużytkownika, możesz przejść dalej i samodzielnie zmienić wszystkie uprawnienia, wykonując krok drugi, w każdym innym przypadku będziesz musiał zapytać wszystkich użytkowników z obiektami utworzonymi z ich użytkownikami, użyj następującego polecenia, aby dowiedzieć się, kim oni są :
Teraz ty i wszyscy właściciele plików, będziecie musieli zmienić uprawnienia do tych plików, wykonując:
Następnie musisz dodać nową właściwość, która jest równoważna z --shared = grupa wykonana dla nowego repozytorium, zgodnie z dokumentacją, dzięki czemu repozytorium można zapisać w grupie, wykonaj to:
https://coderwall.com/p/8b3ksg
źródło
username:groupname
dla mojego, ale kiedy spróbowałemchmod -R 774 .
, mogłem wtedy zgit add --all
powodzeniem biegać .W moim przypadku żadna z sugestii nie zadziałała. Korzystam z systemu Windows i działało to dla mnie:
git remote add foo //SERVERNAME/path/to/copied/git
)git push foo master
. Czy zadziałało Świetny! Teraz usuń niedziałające repozytorium i zmień jego nazwę na dowolną wcześniej. Upewnij się, że uprawnienia i właściwość udostępniania pozostają takie same.źródło
Uderzyłem ten sam problem. Czytając tutaj, zdałem sobie sprawę, że chodzi o uprawnienia do plików, o których mowa w wiadomości. Dla mnie poprawka dotyczyła:
/etc/inetd.d/git-gpv
Zaczynał git-daemon jako użytkownik „ nobody ”, więc brakowało mu uprawnień do zapisu.
(Wątpię, aby inni nazywali swój plik inetd conf git-gpv. Zwykle byłby bezpośrednio w /etc/inetd.conf)
źródło
Potrzebujesz wystarczających uprawnień do zapisu w katalogu, do którego wypychasz.
W moim przypadku: serwer Windows 2008
kliknij prawym przyciskiem myszy katalog git repo lub katalog nadrzędny.
Właściwości> karta Udostępnianie> Udostępnianie zaawansowane> Uprawnienia> upewnij się, że użytkownik ma odpowiednie prawa dostępu.
źródło
Możliwe, że przypadkowo zagnieżdżono repozytoria git
źródło
Istnieje również możliwość dodania innego lokalnego repozytorium z tym samym aliasem. Na przykład masz teraz 2 foldery lokalne nazywane
origin
tak, że podczas próby wypchnięcia zdalne repozytorium nie zaakceptuje poświadczeń.Zmień nazwę aliasów lokalnego repozytorium, możesz kliknąć ten link https://stackoverflow.com/a/26651835/2270348
Może możesz zostawić 1 lokalne repozytorium, które ci się podoba,
origin
a inni zmienią ich nazwy, na przykład odorigin
doanotherorigin
. Pamiętaj, że to tylko aliasy, a wszystko, co musisz zrobić, to zapamiętać nowe aliasy i ich odpowiednie odległe gałęzie.źródło
Pracuje dla mnie
źródło
Dostałem to, wciągając się w projekt Rstudio. Zrozumiałem, że zapomniałem zrobić:
podczas uruchamiania programu. Ponieważ mam inny błąd, muszę go wykonać:
źródło
Użyj sudo do zatwierdzenia -m
źródło
Problem występował w przypadku zdalnego repozytorium w udziale Samba; Udało mi się wyciągnąć z tego pilota, ale nie udało mi się go naciskać.
Przyczyną błędu były nieprawidłowe dane uwierzytelniające w moim
~/.smbcredentials
pliku.źródło