Błąd git Push: niewystarczające uprawnienia do dodania obiektu do bazy danych repozytorium
Kiedy próbuję wcisnąć do współdzielonego git remote, pojawia się następujący błąd:
insufficient permission for adding an object to repository database
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
wgit help config
). Jeżeli wyjście:git config core.sharedRepository
Nie Jest
group
anitrue
ani1
ani jakąś maską, spróbuj uruchomić:git config core.sharedRepository group
A następnie uruchom ponownie rekurencyjne
chmod
ichgrp
(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
jesttrue
lubgroup
, 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
lubchown
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.
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
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)
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.
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
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
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.
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
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.
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
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
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.
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)
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 .
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"
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.
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
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.
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
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
.
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
.
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"
.
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