2010-10-26 11 views
44

mam ten problem, gdy próbuję wcisnąć git:git: nie może wypchnąć (błąd Unpacker) związane z pozwoleniem wydaje

error: insufficient permission for adding an object to repository database ./objects 

fatal: failed to write object 
error: unpack failed: unpack-objects abnormal exit 
To ssh://<repo url>/<repo dir> 
! [remote rejected] master -> master (n/a (unpacker error)) 
error: failed to push some refs to 'ssh://<repo url>/<repo dir>' 

ja miałem to wcześniej sporadycznie i zawsze mieliśmy do go rozwiązać przez każdy użytkownik sshing do repo i ustawiania uprawnień grupowych na wszystkich plików w nim z

chmod -R g+w * 

to nigdy nie było zadowalające rozwiązanie i teraz to ugryziony nas w dupie, jak jeden z chłopaków jest z dala i no- zna jego hasło użytkownika repo. Tak więc staram się rozwiązać to poprawnie.

Błąd pojawia się, gdy ktoś próbuje przesunąć zmianę, która zmieni katalog repo, który jest własnością innego użytkownika (stąd ustawienie opcji zapisu grupy powyżej). Poświęciłem temu trochę czasu i znalazłem kilka omówionych rozwiązań (z których żadna nie zadziałała)

1) upewnij się, że grupa, z którą repo są udostępniane repo, jest głównym użytkownikiem każdego użytkownika grupa (wierzę, że jest już sprawę: każdy użytkownik ma tylko jedną grupę, tak że musi być ich główną grupą, prawy)

2) ustawienie git repo core.sharedRepository, jak opisano tutaj: Git: Can't push from one computer Zmieniłem to jednak to nie miało znaczenia. Czy muszę ponownie załadować konfigurację lub coś, co faktycznie wpłynie na zmianę?

Oto co mój repo config wygląda atm:

[core] 
     repositoryformatversion = 0 
     filemode = true 
     bare = true 
     sharedRepository = all 
[receive] 
     denyNonFastForwards = True 

wdzięczny za wszelkie rady i sugestie! max

+0

można zapewnić minimalny repo testową, która wywołuje ten problem? Mogę go zawsze uzyskać, jeśli mam katalog '.GIT' (wielkie litery) w repozytorium. –

Odpowiedz

3

Używam gitosis do zarządzania tego rodzaju rzeczy. Gitosis ma jednego użytkownika (zwykle nazywanego "git"), który jest właścicielem wszystkich repozytoriów, i korzysta z kontroli dostępu opartej na kluczu publicznym do każdego repozytorium. Może to nie odpowiadać twojej konfiguracji, ale prawdopodobnie warto sprawdzić (gra słów nie jest przeznaczona).

+1

Istnieje również gitolite (http://github.com/sitaramc/gitolite), który jest rodzajem zaktualizowanej i ulepszonej wersji gitosis. – ebneter

+0

Dzięki chłopaki. Ale czy muszę odbudować moje repozytorium od zera za pomocą gitosis/gitolite? –

+1

Nie. Wystarczy wsunąć swoją obecną głowę w repozytorium gitosis lub skopiuj katalog repo do tego stworzonego przez gitosis. –

24

Prostszym sposobem na to jest dodanie skryptu po odebraniu, który uruchamia polecenie chmod po każdym naciśnięciu przycisku "hub" repo na serwerze. Dodaj następujący wiersz do haków/post-otrzymywać wewnątrz folderu git na serwerze:

chmod -Rf u+w /path/to/git/repo/objects 
+0

Dziękuję za tę odpowiedź, miałem do czynienia z tym samym problemem i po prostu nie chciałem założyć całego pakietu zarządzania repo tylko po to, żeby sobie z tym poradzić. – Kelly

+2

Ten skrypt post-recive pracował dla mnie: chown -R git: git /home/git/repositories/myrepo.git/objects/ – fjsj

+3

może być również problemem właściciela, jeśli niektóre foldery/pliki w odległym repozytorium zostały zmodyfikowane/utworzone przez inny zdalny użytkownik, inny niż popychacz –

1

miałem problemy z tym też myśli moje zdalnego gitolite-admin została uszkodzona lub coś złego.

Moja konfiguracja to laptop Mac OS X (10.6.6) ze zdalnym serwerem Ubuntu 10 z gitolite.

Okazało się, że problem polegał na tym, że mój lokalny odbiór gitolite-admin.

Pomimo błędu "rozpakuj błąd" okazało się, że problem jest lokalny.

Zorientowałem się, sprawdzając to ponownie jako gitolite-admin2, dokonując zmiany i pchania.

Voila! Zadziałało!

+0

Dla mnie problem był również w lokalnym repozytorium (prawdopodobnie dlatego, że użyłem starszej wersji git na nowszych wersjach struktur .git). git push nie działał, ale zrobił to klon git, więc sklonowałem moje lokalne repozytorium, a następnie przeszczepiłem nowe .git do lokalnego repozytorium. Dzięki za podpowiedź! –

5

W przypadku, gdy ktoś inny utknie w tym: oznacza to, że uprawnienia do zapisu są nieprawidłowe w repozytorium, do którego naciskasz.Idź i chmod -R to tak, że użytkownik, do którego uzyskujesz dostęp do serwera git ma dostęp do zapisu.

http://blog.shamess.info/2011/05/06/remote-rejected-na-unpacker-error/

To po prostu działa.

+1

Wysyłaj odpowiedzi z zewnętrznymi odpowiedziami na stackoverflow: w przypadku, gdy zewnętrzny adres URL nie działa. – ThorSummoner

+0

@ThorSummoner Zrobione. – sjas

8

To błąd uprawnień. Najbardziej stosownym i bezpiecznym dla mnie sposobem było uzyskanie repozytorium. jest własnością (lub odwrotnie):

groupadd git 
chgrp -R git .git 
chgrp -R git ./ 
usermod -G -a git $(whoami) 
+3

Czy nie powinno to być 'usermod -G -a ...' w celu uniknięcia usunięcia użytkownika ze wszystkich grup z wyjątkiem 'git'? – chris

+1

Woah ... Nie mogę uwierzyć, że tęskniłem za tym i mam nadzieję, że nie było mylących reperkusji dla tych, którzy wygrali. Dzięki, @chris – Alastair

1

Ten problem może również wystąpić po aktualizacji Ubuntu, które wymagają ponownego uruchomienia komputera.

Jeśli istnieje plik /var/run/reboot-required, wykonaj lub zaplanuj ponowne uruchomienie.

13

Miałem ten błąd przez dwa tygodnie, a większość rozwiązań określiła "chmod -R" jako odpowiedź, niestety dla mnie moje repozytorium git (lokalne/zdalne/udostępnione - z zespołem) były wszystkie w systemie operacyjnym Windows , a nawet jeśli chmod -Rv pokazał wszystkie pliki zmienione na "rwxrwxrwx", kolejne "ls -l" nadal pokazywało wszystkie pliki jako "rwxr-xr-x", a błąd powtórzył się. W końcu zobaczyłem this solution autorstwa Ariejana de Vrooma. Udało się i wszyscy byliśmy w stanie ciągnąć i naciskać ponownie.

On zarówno lokalny (miejscowy, który ma problemy z pchającą) oraz zdalnego repo, uruchom następujące polecenia:

$ git fsck 
$ git prune 
$ git repack 
$ git fsck 

Na marginesie, próbowałem przy użyciu rodzimych uprawnienia plików systemu Windows'/ACL i nawet uciekają podnieść użytkownika problemu do administratora, ale nic z tego nie pomogło. Nie wiem, czy środowisko jest ważne, ale może pomóc komuś z podobną konfiguracją - problemowym członkiem zespołu i zdalnym (Windows Server 2008 R2 Standard), moim lokalnym (Windows 7 VM).

+0

Istnieje przyczyna tego błędu, gdy występuje uszkodzenie systemu plików git i te instrukcje pomogły go naprawić. Dzięki – nkadwa

+0

@nkadwa Cieszę się, że to może ci pomóc –

+0

Dzięki! Pomaga w mojej sprawie. 1 głos na ciebie! – Hatjhie

0

Wystąpił podobny błąd i zobacz poniżej, jak go rozwiązałem.

Moja struktura katalogów: /opt/git/project.git i git użytkownik jest git

$ cd /opt/git/project.git 
$ sudo chown -R git:git . 

chown -R opcja rekurencyjnie zmienia własności i i grupy (od Wpisałem git: git w powyżej polecenia) w bieżącym katalogu. chown -R jest konieczny, ponieważ git zmienia wiele plików w twoim katalogu git, kiedy będziesz naciskał do repozytorium.

0

gdzie pracuję używamy tej metody na wszystkich naszych repozytoriów przez kilka lat bez żadnych problemów (z wyjątkiem, gdy tworzymy nowe repozytorium i zapomnieć, aby ustawić go w ten sposób):

  1. Set "sharedRepository = true" w sekcji "[core]" pliku konfiguracyjnego.
  2. Zmiana id grupa repozytorium do grupy wspólne dla wszystkich użytkowników, którzy mają prawo do pchania do niego:

    chgrp -R shared_group /git/our_repos 
    chmod -R g+w /git/our_repos 
    
  3. Ustaw setgid nieco na wszystkich katalogów w repozytorium tak, że nowe pliki/katalogi zachować tę samą grupę:

    find /git/our_repos -type d -exec chmod g+s {} + 
    
  4. Dodaj tę linię, aby otrzymać wstępnie hak w repozytorium, aby zapewnić nowe uprawnienia do plików pozwalają grupa Odczyt/zapis:

    umask 007 
    
1

Za to, co jest warte, miałem ten sam problem z moim własnym VPS i było to spowodowane moim niskim miejscem na dysku twardym na VPS. Potwierdzone przez polecenie df -h i po wyczyszczeniu dysku twardego VPS; problem zniknął.

Pozdrawiam.

+0

Tak, to rozwiązało również mój problem. – jax

1

Dla mnie to kwestia jego uprawnień:

Na metę serwera git to polecenie w katalogu repo

sudo chmod -R 777 theDirectory/ 
2

Dla mnie wystąpił ten błąd, gdy mnie nie było miejsca na moim pilocie.

ja po prostu potrzebne, aby przeczytać resztę komunikat o błędzie:

error: file write error (No space left on device) 
fatal: unable to write sha1 file 
error: unpack failed: unpack-objects abnormal exit 
Powiązane problemy