2013-04-24 7 views
11

Przez ponad rok miałem kłopoty z GIT i uprawnieniami katalogu/pliku. Mam centralne repozytorium, do którego wielu programistów wysyła kod, używając ssh (początek ustawiony jako ssh: // example/git/repository). Po ustawieniu się repozytorium następująco:Własność/grupa plików zmienia się, gdy użytkownicy przesyłają do repozytorium GIT

1) My plik konfiguracyjny w centralnym repozytorium [rdzeń] repositoryformatversion = 0 FileMode = prawda nagie = prawda sharedrepository = 0660

2) wszystkich Uprawnienia do katalogu repozytorium są ustawione na 770 (rwxrwx ---) 3) Wszystkie pliki w ./objects/XX i ./objects/info są ustawione na 440 (r - r -----) 4) Wszystkie inne pliki są ustawione na 660 (rw-rw ----) 5) Własność jest ustawiona na root: nazwa_grupy

(należy zwrócić uwagę, że pochodzi z zalecanej konfiguracji z najwyższej odpowiedzi w tym wątku: Making git push respect permissions?)

Wszyscy uzyskujący dostęp użytkownicy są członkami grupy "nazwa_grupy".

Problem polega na tym, że jeśli użytkownik 1 przesuwa się do repozytorium, własność pliku w niektórych plikach jest ustawiana na wartość użytkownik1: użytkownik1 - co oznacza, że ​​grupa została zmieniona. Kiedy to nastąpi, żaden inny użytkownik nie może wypychać (lub wyciągać) z repozytorium, ponieważ nie ma już uprawnień do odczytu, zapisu lub wykonywania z wymaganych plików w repozytorium.

Przeczytałem każdy wątek, jaki mogę znaleźć odnośnie tej sprawy w Stack Overflow i prawie wszędzie w sieci, ale ciągle napotykam ten sam problem.

Problem polega na tym, nie jestem pewien, czy ten problem jest jednym z GIT, czy jednym z UNIX, i nie jestem pewien, jak to naprawić. Jak mogę zatrzymać zmianę grupy, gdy użytkownik przesuwa się do repozytorium?

+0

Jak ... Ty naciskasz? Z jakimi uprawnieniami użytkownika to robisz? – Makoto

+0

Przesyłanie za pomocą: git push Przesuwamy przez ssh. Każdy użytkownik ściąga na serwer za pomocą swojego konta użytkownika UNIX. Na przykład, jestem użytkownikiem shiro na serwerze. Dane logowania używane dla SSH są dla użytkownika shiro. Użytkownik shiro jest częścią grupy shirogroup. Właścicielem pliku jest root: shirogroup. Czy to odpowiada na twoje pytanie? – Shiro

+0

Mam suphp na moim serwerze - czy to możliwe, że to zmienia moje uprawnienia do plików, a nie GIT? – Shiro

Odpowiedz

16

Wygląda na to, że zmieniono core.sharedRepository po zainicjowaniu repozytorium zamiast używania init --shared=group, które powinno poprawnie ustawić uprawnienia. Oznacza to, że bit sgid nie zostanie poprawnie ustawiony na katalogach repozytorium git. Będziesz musiał to naprawić ręcznie z czymś podobnym (zakładając GNU find i xargs):

find . -print0 | xargs -0 chgrp group_name 

find . -type d -print0 | xargs -0 chmod g+s 
+0

Ty jesteś księciem. Byłaś poprawna, że ​​zmieniłem core.shareRepository po zainicjowaniu repozytorium, a twoja poprawka rzeczywiście działała. Walczyłem z tym w różnych momentach w ciągu ostatniego roku, więc jestem bardzo wdzięczny, że w końcu to działa! – Shiro

+0

To wszystko jest poprawne i użyteczne, ale można dodać nieco: własność grupowa pliku zostanie zresetowana na podstawie właściciela grupy katalogów (gdy ustawiono g + s) dla każdego katalogu. Oznacza to, że możesz mieć wielu właścicieli grup dla różnych katalogów, o ile jest to skonfigurowane na podstawie katalogu dla poszczególnych repozytoriów (i wszystkie zestawy g + s są ustawione). – dmansfield

Powiązane problemy