Jak zapobiec wymaganiu sudo przy każdym poleceniu git?

11

Utworzyłem katalog /var/wwwdo przechowywania klonowanych aplikacji internetowych. Kiedy początkowo klonowałem aplikację z GitHub, wymagałem używania sudo i za każdym razem, gdy to robię git pull, wymaga sudo. Mam z tego powodu problemy. Na przykład moje klucze ssh nie pasują do siebie. Więc kiedy to robię git pull, muszę używać HTTPS zamiast ssh i ręcznie wpisywać nazwę użytkownika i hasło za każdym razem, gdy chcę pobrać i zaktualizować moją aplikację. Jak to skonfigurować, aby nie musiałem używać sudo za każdym razem, gdy korzystam z git?

Scott
źródło

Odpowiedzi:

13

Tutaj dzieje się kilka rzeczy:

  • Gdy Ty sudo git checkout ..., wszystkie te pliki są własnością użytkownika root i grupy root. Ze standardowymi uprawnieniami, dlatego kolejne zmiany tych plików wymagają roota.

  • /var/www/domyślnie jest własnością www-datagrupy. Coś, co użytkownik nie jest domyślnie.

Najprostszym sposobem na zapisanie się /var/www/jest dodanie użytkownika do grupy danych www . Możesz oczywiście zmienić katalog, którego właścicielem jest użytkownik, ale może to mieć nieprzyjemne efekty domina, jeśli nie będziesz go uprzedzać.

Musisz ponownie się zalogować po dodaniu użytkownika do grupy danych www.

W twoim przypadku będziesz musiał naprawić swój obecny bałagan danych będących własnością roota. Możesz albo usunąć go jako root (i ponownie sprawdzić), ale jeśli masz niezapisaną pracę, po prostu czystsze będzie wyciągnięcie wszystkiego z powrotem do użytkownika. Poniższy przykład jest wyjątkowo leniwy i zakłada, że ​​to, o czym mówimy, jest jedyną rzeczą w / var / www /:

sudo chown -R www-data: /var/www/
Oli
źródło
Ok, czy lepiej byłoby po prostu przejść sudo git checkoutdo innego katalogu, a następnie wdrożyć moją aplikację w katalogu / var / www? Właśnie gdzieś przeczytałem, że generalnie nie jest dobrym pomysłem, aby na początek sprawdzić projekty w katalogu var. Jedna osoba poleciła sprawdzenie projektów w katalogu domowym
Scott
2
Byłoby najlepiej , gdybyś przestał uruchamiać git jako root. Celuj w to. Jakikolwiek plan, który pozostawia cię uruchomionym jako root, już się nie udał. Co mówisz o sprawdzanie na katalog stron www jest poprawna - zapewnia użytkownikom dostęp do .gitkatalogu może dać im dostęp do rzeczy, które nie chcą pozwolić ludziom dostęp, ale można uniemożliwić dostęp do .git/katalogu która łagodzi całą sprawę.
Oli
Istnieją również inne akceptowalne struktury katalogów, w których masz katalog przechowywania dla swojej witryny, do którego przechodzą rzeczy nie hostowane (w tym .git), a wewnątrz jest katalog publiczny /, który każesz Apache hostować. Etos prowadzenia jednej strony w / var / www / jest bardzo archaiczny.
Oli
Czy masz zalecaną strukturę katalogów? Zasadniczo mam moją kasę, a następnie muszę ją spakować do pliku .tgz. A potem muszę to rozdzielić na aplikację w węźle. Nawiasem mówiąc, jest to aplikacja meteorowa. Jestem trochę zdezorientowany, gdzie przechowywać te trzy osobne foldery / pliki
Scott
@Scott Natrafiłem na ten sam problem. Kolejne podkomendy w repozytorium (w moim przypadku) wywołają git i spróbują sklonować inne repo. Rozwiązaniem, aby ponownie wyrównać klucze SSH, jak powiedziałeś, było rozpoczęcie procesu bez użycia sudo. Wiele z tych pytań i wątków jest obejściem problemu, który prawdopodobnie spowoduje, że uderzysz o ściany w dół drogi.
Jordan Stefanelli
0

Hm, zmienić właściciela folderu? Przeniosłem folder www w / home / nazwa użytkownika, możesz zmienić jego lokalizację w / etc / apache2 / sites-enabled / 000-default

Michel
źródło
Więc to ma związek z katalogiem, w którym przechowuję mój klon?
Scott
Tak, dokładnie. Domyślnie /var/wwwnie można pisać.
Joyfulgrind
0

Jestem nieco spóźniony z odpowiedzią, ale stwierdziłem, że aby uniknąć wpisywania hasła za każdym razem, musiałem zmienić repo z https na ssh.

Z sekcji pomocy Github.com:

Komenda git remote set-url zmienia istniejący adres URL zdalnego repozytorium.

Otwórz terminal.

Zmień bieżący katalog roboczy na projekt lokalny.

Wymień istniejące piloty, aby uzyskać nazwę pilota, który chcesz zmienić.

git remote -v
origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
origin  https://github.com/USERNAME/REPOSITORY.git (push)

Zmień adres URL pilota z HTTPS na SSH za pomocą polecenia git remote set-url.

git remote set-url origin [email protected]:USERNAME/REPOSITORY.git

Sprawdź, czy zdalny adres URL się zmienił.

git remote -v

# Sprawdź nowy zdalny adres URL

origin  [email protected]:USERNAME/REPOSITORY.git (fetch)
origin  [email protected]:USERNAME/REPOSITORY.git (push)
jonnyjandles
źródło