Wie verhindere ich, dass git bei jedem git-Befehl sudo benötigt?


10

Ich habe ein Verzeichnis erstellt, /var/wwwin dem meine Web-Apps geklont werden können. Als ich die App ursprünglich von GitHub geklont habe, musste ich sudo verwenden, und jedes Mal, wenn ich eine mache git pull, ist sudo erforderlich. Aus diesem Grund habe ich einige Probleme. Zum Beispiel stimmen meine SSH-Schlüssel nicht überein. Wenn ich das mache git pull, muss ich HTTPS anstelle von ssh verwenden und meinen Benutzernamen und mein Passwort jedes Mal manuell eingeben, wenn ich meine App abrufen und aktualisieren möchte. Wie konfiguriere ich das, damit ich nicht jedes Mal, wenn ich git benutze, sudo verwenden muss?

Antworten:


12

Hier ist einiges los:

  • Wenn Sie sudo git checkout ..., gehören alle diese Dateien dem Root-Benutzer und der Root-Gruppe. Bei den Standardberechtigungen müssen Sie daher bei nachfolgenden Änderungen an diesen Dateien root sein.

  • /var/www/Standardmäßig gehört die www-dataGruppe. Etwas, das Ihr Benutzer nicht standardmäßig verwendet.

Der einfachste Weg zum Schreiben /var/www/besteht darin , Ihren Benutzer einfach zur www-Datengruppe hinzuzufügen . Sie können natürlich das Verzeichnis ändern, das Ihrem Benutzer gehört, aber dies kann einige unangenehme Auswirkungen haben, wenn Sie sie nicht vorwegnehmen.

Sie müssen sich erneut anmelden, nachdem Sie Ihren Benutzer zur Gruppe www-data hinzugefügt haben.

In Ihrem speziellen Fall müssen Sie Ihr aktuelles Durcheinander an Root-Daten beheben. Sie können es entweder als root löschen (und erneut auschecken), aber wenn Sie nicht gespeicherte Arbeit haben, ist es nur sauberer, alles zurück zu Ihrem Benutzer zu ziehen. Das folgende Beispiel ist extrem faul und geht davon aus, dass das, worüber wir sprechen, das einzige in / var / www / ist:

sudo chown -R www-data: /var/www/

Ok, wäre es besser, einfach sudo git checkoutin ein anderes Verzeichnis zu wechseln und dann meine App im Verzeichnis / var / www bereitzustellen? Ich habe gerade irgendwo gelesen, dass es im Allgemeinen keine gute Idee ist, Projekte zunächst in das var-Verzeichnis auszuchecken. Eine Person empfahl, Projekte im Home-Verzeichnis
Scott

2
Es wäre am besten, wenn Sie aufhören würden, git als root auszuführen. Ziel dafür. Jeder Plan, bei dem Sie ihn als Root ausführen, ist bereits fehlgeschlagen. Was Sie sagen über in eine webdirectory Check - out ist richtig - die Menschen Zugang zu Ihrem geben .gitVerzeichnis kann ihnen Zugang zu den Dingen geben , die Sie nicht wollen Menschen Zugang zu lassen, aber Sie können den Zugriff auf die verhindern .git/dir welche mildert das ganze Thema.
Oli

Es gibt auch andere akzeptable Verzeichnisstrukturen, in denen Sie ein Verzeichnis für Ihre Website haben, in dem nicht gehostete Inhalte gespeichert sind (einschließlich Ihrer .git-Datei), und in dem sich ein öffentliches Verzeichnis befindet, das Sie Apache zum Hosten anweisen. Das Ethos, eine Website in / var / www / zu halten, ist sehr archaisch.
Oli

Haben Sie eine empfohlene Verzeichnisstruktur? Grundsätzlich habe ich meine Kasse, und dann muss ich das in eine .tgz bündeln. Und dann muss ich das in eine Knotenanwendung entpacken. Es ist übrigens eine Meteoranwendung. Ich bin irgendwie verwirrt, wo ich diese drei separaten Ordner / Dateien aufbewahren soll
Scott

@ Scott Ich bin auf dasselbe Problem gestoßen. Nachfolgende Unterbefehle im Repo (in meinem Fall) rufen git auf und versuchen, andere Repos zu klonen. Die Lösung, um die SSH-Schlüssel wie angegeben neu auszurichten, bestand darin, den Prozess ohne Verwendung von sudo zu starten. Ein Großteil dieser Q & A- und Thread-Diskussionen ist eine Problemumgehung, bei der Sie wahrscheinlich später gegen Wände stoßen werden.
Jordan Stefanelli

0

Hm, Ordnerbesitzer wechseln? Ich habe meinen WWW-Ordner in / home / username verschoben. Sie können den Speicherort in / etc / apache2 / sites-enabled / 000-default ändern


Hat es also mit dem Verzeichnis zu tun, in dem ich meinen Klon speichere?
Scott

Ja genau. Standardmäßig /var/wwwkann nicht geschrieben werden.
Joyfulgrind

0

Ich bin etwas spät dran mit dieser Antwort, aber ich habe festgestellt, dass ich das Repo nicht jedes Mal ändern muss, wenn ich das Repo von https auf ssh ändern muss.

Im Hilfebereich von Github.com:

Der Befehl git remote set-url ändert eine vorhandene Remote-Repository-URL.

Terminal öffnen.

Ändern Sie das aktuelle Arbeitsverzeichnis in Ihr lokales Projekt.

Listen Sie Ihre vorhandenen Fernbedienungen auf, um den Namen der Fernbedienung zu erhalten, die Sie ändern möchten.

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

Ändern Sie die URL Ihrer Fernbedienung mit dem Befehl git remote set-url von HTTPS in SSH.

git remote set-url origin git@github.com:USERNAME/REPOSITORY.git

Stellen Sie sicher, dass sich die Remote-URL geändert hat.

git remote -v

# Überprüfen Sie die neue Remote-URL

origin  git@github.com:USERNAME/REPOSITORY.git (fetch)
origin  git@github.com:USERNAME/REPOSITORY.git (push)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.