Błąd git Push: niewystarczające uprawnienia do dodania obiektu do bazy danych repozytorium

 632
Author: skaz, 2011-06-23

22 answers

Uprawnienia Do Naprawy

Po zidentyfikowaniu i naprawieniu podstawowej przyczyny (patrz poniżej), będziesz chciał naprawić uprawnienia:

cd /path/to/repo.git
sudo chgrp -R groupname .
sudo chmod -R g+rwX .
find . -type d -exec chmod g+s '{}' +

Uwaga Jeśli chcesz, aby każdy mógł modyfikować repozytorium, nie potrzebujesz chgrp i chcesz zmienić chmod na sudo chmod -R a+rwX .

Jeśli nie naprawisz podstawowej przyczyny, błąd będzie powracał i będziesz musiał ponownie uruchamiać powyższe polecenia w kółko.

Przyczyny

Błąd może być spowodowany przez jedną z następujących przyczyn:]}
  • Repozytorium nie jest skonfigurowane jako współdzielone (zobacz core.sharedRepository w git help config). Jeżeli wyjście:

    git config core.sharedRepository
    

    Nie Jest group ani true ani 1 ani jakąś maską, spróbuj uruchomić:

    git config core.sharedRepository group
    

    A następnie uruchom ponownie rekurencyjne chmod i chgrp (patrz "uprawnienia naprawy" powyżej).

  • System operacyjny nie interpretuje bitu setgid w katalogach jako " Wszystkie nowe pliki i podkatalogi powinny dziedziczyć właściciela grupy".

    Gdy core.sharedRepository jest true lub group, Git polega na funkcji systemów operacyjnych GNU (np. każdej dystrybucji Linuksa), aby upewnić się, że nowo utworzone podkatalogi są własnością odpowiedniej grupy (grupy, w której znajdują się wszyscy użytkownicy repozytorium). Ta funkcja jest udokumentowana w dokumentacji GNU coreutils :

    ... [Jeśli] ustawiony jest bit set-group-ID katalogu, nowo utworzone podfile dziedziczą tę samą grupę, co katalog i nowo utworzone podkatalogi dziedziczą bit set-group-ID katalogu nadrzędnego. ... [Ten mechanizm pozwala] użytkownikom łatwiej udostępniać pliki, zmniejszając potrzebę używania chmod lub chown do udostępniania nowych plików.

    Jednak nie wszystkie systemy operacyjne mają tę funkcję(NetBSD jest jednym z przykładów). Dla tych systemów operacyjnych, powinieneś upewnić się, że wszyscy użytkownicy Gita mają tę samą domyślną grupę. Alternatywnie można uczynić świat repozytorium zapisywalnym przez running git config core.sharedRepository world (ale uważaj-to jest mniej bezpieczne).

  • system plików nie obsługuje bitów setgid(np. ext2, ext3, ext4 wszystkie obsługują bit setgid. Z tego, co wiem, systemy plików, które nie obsługują bitu setgid, również nie obsługują pojęcia własności grupy, więc wszystkie pliki i katalogi i tak będą własnością tej samej grupy (która grupa jest opcją montowania). W tym przypadku upewnij się, że wszyscy użytkownicy Gita są w grupie, która posiada wszystkie pliki w pliku system.
  • nie wszyscy użytkownicy Gita są w tej samej grupie, która jest właścicielem katalogów repozytoriów. Upewnij się, że właściciel grupy w katalogach jest poprawny i że wszyscy użytkownicy są w tej grupie.
 928
Author: Richard Hansen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-28 17:58:12

Dla Ubuntu (lub dowolnego Linuksa)

From project root,

cd .git/objects
ls -al
sudo chown -R yourname:yourgroup *

Możesz określić, jaka jest Twoja nazwa i twoja grupa, patrząc na uprawnienia na większości wyjść z tego polecenia ls-al

Uwaga: Pamiętaj o gwiazdce na końcu linii sudo

 479
Author: TerryS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-21 13:04:23

Użyj następującego polecenia, działa jak magia

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

Wpisz polecenie dokładnie tak, jak jest (z dodatkowymi spacjami i jedną kropką na końcu)

 110
Author: Code_Worm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-19 12:39:33

sudo chmod -R ug+w .;

Zasadniczo, .git/objects plik nie ma uprawnień do zapisu. Powyższa linia daje uprawnienia do wszystkich plików i folderów w katalogu.

 52
Author: Rajendra kumar Vankadari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-06 00:18:15

Chciałem tylko dodać moje rozwiązanie. Miałem repo na OS X, który miał własność roota na niektórych katalogach i dom (który jest moim katalogiem użytkownika) na innych, co spowodowało ten sam błąd wymieniony powyżej.

Rozwiązanie było proste na szczęście. Z Terminala:

sudo chown -R Home projectdirectory
 29
Author: Brandon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-14 18:18:06

/ Align = "left" / .. tylko to:

sudo chmod 777 -R .git/objects
 22
Author: GUSTAVO BERBERT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-04 10:53:56

Dobrym sposobem na debugowanie jest to, że następnym razem tak się stanie, SSH do zdalnego repo, cd do folderu objects i wykonaj ls -al.

Jeśli widzisz 2-3 pliki z inną własnością user:group, to jest to problem.

Zdarzyło mi się to w przeszłości z niektórymi starszymi skryptami dostęp do naszego Git repo i zwykle oznacza to, że inny (unix) użytkownik wypchnął / zmodyfikował pliki Ostatnio i twój użytkownik nie ma uprawnień do nadpisywania tych plików. Powinieneś utworzyć wspólną grupę Gita, którą wszystkie użytkownicy z obsługą git znajdują się w katalogu chgrp objects, a następnie rekurencyjnie w katalogu objects, a jego zawartość jest własnością grupy git.

Należy również dodać bit lepki do folderu, aby wszystkie pliki utworzone w folderze zawsze miały grupę git.

Chmod G+S katalog-nazwa

Aktualizacja: nie wiedziałem o core.sharedRepository. Dobrze wiedzieć, choć prawdopodobnie po prostu robi powyższe.

 19
Author: Mauvis Ledford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-23 04:43:11

Może to się łatwo zdarzyć, jeśli uruchomiłeś git init z innym użytkownikiem niż ten, którego planujesz użyć podczas przesuwania zmian.

Jeśli ślepo postępujesz zgodnie z instrukcjami na [1] stanie się tak, ponieważ prawdopodobnie utworzyłeś git-usera jako root, a następnie natychmiast przeszedłeś do git init bez zmiany użytkownika pomiędzy nimi.

[1] http://git-scm.com/book/en/Git-on-the-Server-Setting-Up-the-Server

 9
Author: gitzor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-05 12:12:46

Linux, macOS:

cd .git/
sudo chown -R name:group *

Gdzie name jest Twoją nazwą użytkownika i {[2] } jest grupą, do której należy Twoja nazwa użytkownika.

 9
Author: Afshin Mehrabani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-02 15:26:02

Rozwiązaniem sumplest jest:

Z projektu dir:

sudo chmod 777 -R .git/objects
 8
Author: Jackkobec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-02 09:52:32

Po dodaniu kilku rzeczy... zatwierdź je i po tym wszystkim naciśnij go! BANG!! Start wszystkie problemy... Jak należy zauważyć, istnieją pewne różnice w sposobie definiowania zarówno nowych, jak i istniejących projektów. Jeśli inna osoba spróbuje dodać / zatwierdzić / wypchnąć te same pliki lub zawartość (git zachowuje oba jako te same obiekty), napotkamy następujący błąd:

$ git push
Counting objects: 31, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (17/17), done.
Writing objects: 100% (21/21), 2.07 KiB | 0 bytes/s, done.
Total 21 (delta 12), reused 0 (delta 0)
remote: error: insufficient permission for adding an object to repository database ./objects  remote: fatal: failed to write object

Aby rozwiązać ten problem musisz mieć coś na uwadze system uprawnień systemu operacyjnego, ponieważ są przez niego ograniczone w tym case. Tu zrozumieć lepiej problem, śmiało i sprawdzić folder Twojego obiektu git (.git / objects). Prawdopodobnie zobaczysz coś takiego:

<your user_name>@<the machine name> objects]$ ls -la
total 200
drwxr-xr-x 25 <your user_name> <group_name> 2048 Feb 10 09:28 .
drwxr-xr-x  3 <his user_name> <group_name> 1024 Feb  3 15:06 ..
drwxr-xr-x  2 <his user_name> <group_name> 1024 Jan 31 13:39 02
drwxr-xr-x  2 <his user_name> <group_name> 1024 Feb  3 13:24 08

*zauważ, że te uprawnienia zostały przyznane tylko dla użytkowników, nikt nigdy nie będzie mógł go zmienić... *

Level       u   g   o
Permission rwx r-x ---
Binary     111 101 000
Octal       7   5   0

ROZWIĄZANIE PROBLEMU

Jeśli masz uprawnienia super user, możesz przejść do przodu i zmienić wszystkie uprawnienia samodzielnie za pomocą kroku drugiego, w każdym innym przypadku musisz zapytać wszystkich użytkowników o obiekty utworzone z ich użytkowników, użyj następującego polecenia, aby wiedzieć, kim są:

$ ls -la | awk '{print $3}' | sort -u 
<your user_name>
<his user_name>

Teraz ty i wszyscy użytkownicy właściciela pliku będziecie musieli zmienić te uprawnienia, wykonując:

$ chmod -R 774 .

Następnie musisz dodać nową właściwość, która jest równoważna --shared=group done dla nowego repozytorium, zgodnie z dokumentacją, to sprawia, że grupa repozytorium jest zapisywalna, wykonaj to:

$ git config core.sharedRepository group

Https://coderwall.com/p/8b3ksg

 5
Author: helmedeiros,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-14 00:04:53

W moim przypadku żadna z sugestii nie zadziałała. Jestem na Windowsie i mi to pomogło:

  • skopiuj zdalny repo do innego folderu
  • Udostępnij folder i nadaj odpowiednie uprawnienia.
  • upewnij się, że możesz uzyskać dostęp do folderu z lokalnego komputera.
  • Dodaj ten repo jako inny zdalny repo w lokalnym repo. (git remote add foo //SERVERNAME/path/to/copied/git)
  • Push to foo. git push foo master. Zadziałało? Świetnie! Teraz Usuń nie działające repo i zmień nazwę tego na cokolwiek to było wcześniej. Upewnij się uprawnienia i właściwość share pozostają takie same.
 3
Author: Halil Kaskavalci,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-20 15:20:03

Trafiłem w ten sam numer. Czytając tutaj zdałem sobie sprawę, że to uprawnienia do plików, do których odnosi się wiadomość. Fix , dla mnie był w:

/etc / inetd.d / git-gpv

Uruchamiał git-daemon jako użytkownik ' nobody ', więc nie miał uprawnień do zapisu.

# Who   When    What
# GPV   20Nov13 Created this by hand while reading: http://linuxclues.blogspot.co.uk/2013/06>/git-daemon-ssh-create-repository-debian.html
# GPV   20Nov13 Changed owner (to user_git) otherise nobody lack permission to update the repository
#git stream tcp nowait nobody  /usr/bin/git git daemon --inetd --verbose --enable=receive-pack --export-all /gitrepo
git stream tcp nowait user_git  /usr/bin/git git daemon --inetd --verbose --enable=receive-pack --export-all /gitrepo

(wątpię, aby inni nazywali swój plik inetd git-gpv . Zwykle znajduje się bezpośrednio w /etc / inetd.conf)

 2
Author: GraemeV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-20 17:06:47

Działa dla mnie

sudo chmod -R g+rwX .
 2
Author: Nitin .,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-18 09:25:50

Dodam moje dwa grosze jako sposób na odkrycie plików o określonej własności wewnątrz katalogu .

Problem był spowodowany uruchomieniem jakiegoś polecenia git jako root. Otrzymana wiadomość brzmiała:

$ git commit -a -m "fix xxx"
error: insufficient permission for adding an object to repository database .git/objects
error: setup.sh: failed to insert into database

Najpierw spojrzałam na git config -l, potem rozwiązałam z:

find .git/ -exec stat --format="%G %n" {} + |grep root

chown -R $(id -un):$(id -gn) .git/objects/

git commit -a -m "fixed git objects ownership"
 2
Author: tuxErrante,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-17 15:14:06

Potrzebujesz wystarczających uprawnień do zapisu w katalogu, do którego naciskasz.

W moim przypadku: Windows 2008 server

Kliknij prawym przyciskiem myszy na katalogu Git repo lub katalogu nadrzędnym.

Właściwości > zakładka udostępnianie > Udostępnianie zaawansowane > uprawnienia > upewnij się, że użytkownik ma odpowiednie prawa dostępu.

 1
Author: Fuyu Persimmon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-04 19:06:31

Być może przypadkowo zagnieżdżone repozytoria git

 1
Author: IliasT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-30 21:47:48

Istnieje również możliwość dodania innego lokalnego repozytorium o tym samym aliasie. Na przykład masz teraz 2 foldery lokalne, o których mowa origin więc gdy spróbujesz nacisnąć, zdalne repozytorium nie zaakceptuje Twoich danych uwierzytelniających.

Zmień nazwę aliasów lokalnego repozytorium, możesz skorzystać z tego linku https://stackoverflow.com/a/26651835/2270348

Może możesz zostawić 1 lokalne repozytorium według twoich upodobań jako {[0] } a inne zmienić ich nazwę np. z origin do anotherorigin. Pamiętaj, że są to tylko aliasy i wszystko, co musisz zrobić, to zapamiętać nowe aliasy i ich odpowiednie odległe oddziały.

 1
Author: Huey Mataruse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-19 08:00:34

Mam to, gdy włączam się do projektu Rstudio. Zdałem sobie sprawę, że zapomniałem zrobić:

sudo rstudio

Podczas uruchamiania programu. W rzeczywistości, ponieważ jest jeszcze jeden błąd, który mam, muszę zrobić:

sudo rstudio --no-sandbox
 1
Author: Timothy Pollington,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-26 22:11:01

Otrzymywaĺ 'em ten problem ze zdalnym repozytorium na dzieĹ' u Samby; wyciÄ ... gnÄ ... Ĺ 'em z tego zdalnego repozytorium, ale nie powiodĺ' em siÄ ™ przy wciskaniu do niego.

Przyczyną błędu były nieprawidłowe dane uwierzytelniające w moim pliku ~/.smbcredentials.

 0
Author: Josh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-06 15:08:01

Po długim używaniu Gita bez problemów, napotkałem ten problem dzisiaj. Po pewnym namyśle zdałem sobie sprawę, że zmieniłem dzisiaj moje umask z 022 na coś innego.

Wszystkie odpowiedzi innych osób są pomocne, np. zrób chmod dla katalogów. Ale główną przyczyną jest mój nowy umask, który zawsze będzie powodować nowy problem na drodze, gdy nowy katalog zostanie utworzony pod .git/object/. Więc długoterminowym rozwiązaniem dla mnie jest zmiana umask z powrotem na 022.

 0
Author: Vincent Yin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-23 19:32:36

Otrzymywałem ten błąd podczas uruchamiania zdalnej maszyny programistycznej przy użyciu Vagrant. Żadne z powyższych rozwiązań nie działało, ponieważ wszystkie pliki miały odpowiednie uprawnienia.

Naprawiłem to zmieniając config.vm.box = "hasicorp/bionic64" na config.vm.box = "bento/ubuntu-20.10".

 0
Author: Dabreil Ignis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-14 10:37:28