Comment empêcher git d'exiger sudo sur chaque commande git


10

J'ai créé un répertoire /var/wwwpour stocker le clone de mes applications Web. Lorsque j'ai cloné l'application à partir de GitHub, cela m'a obligé à utiliser sudo et chaque fois que je fais git pullcela, cela nécessite sudo. Je rencontre des problèmes à cause de cela. Par exemple, mes clés ssh ne correspondent pas. Donc, quand je fais mon git pull, je dois utiliser HTTPS au lieu de ssh et entrer manuellement mon nom d'utilisateur et mon mot de passe chaque fois que je veux extraire et mettre à jour mon application. Comment configurer cela pour ne pas avoir à utiliser sudo à chaque fois que j'utilise git?

Réponses:


12

Deux choses se passent ici:

  • Lorsque vous sudo git checkout ..., tous ces fichiers appartiennent à l'utilisateur root et au groupe root. Avec les autorisations standard, c'est pourquoi les modifications ultérieures de ces fichiers nécessitent que vous soyez root.

  • /var/www/par défaut appartient au www-datagroupe. Quelque chose que votre utilisateur n'est pas par défaut.

La façon la plus simple d'écrire /var/www/est d' ajouter simplement votre utilisateur au groupe www-data . Vous pouvez bien sûr modifier le répertoire appartenant à votre utilisateur, mais cela peut avoir des effets d'entraînement désagréables si vous ne les anticipez pas.

Vous devrez vous reconnecter après avoir ajouté votre utilisateur au groupe www-data.

Dans votre cas en particulier, vous devrez corriger votre désordre actuel de données appartenant à root. Vous pouvez soit le supprimer en tant que root (et re-checkout) mais si vous avez un travail non enregistré, il sera juste plus propre de tout ramener à votre utilisateur. L'exemple suivant est extrêmement paresseux et suppose que ce dont nous parlons est la seule chose dans / var / www /:

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

Ok, serait-il préférable de simplement sudo git checkoutdans un autre répertoire, puis de déployer mon application dans le répertoire / var / www? Je viens de lire quelque part que ce n'est généralement pas une bonne idée de retirer des projets dans le répertoire var pour commencer. Une personne a recommandé de vérifier les projets dans le répertoire personnel
Scott

2
Il serait préférable que vous arrêtiez d'exécuter git en tant que root. Visez ça. Tout plan qui vous laisse l'exécuter en tant que root a déjà échoué. Ce que vous dites à propos de l'extraction dans un répertoire Web est correct - donner aux gens l'accès à votre .gitrépertoire peut leur donner accès à des choses auxquelles vous ne voulez pas laisser les gens accéder, mais vous pouvez empêcher l'accès au .git/répertoire qui atténue tout le problème.
Oli

Il existe également d'autres structures de répertoires acceptables dans lesquelles vous avez un répertoire de stockage pour votre site Web où se trouvent des éléments non hébergés (y compris votre .git) et à l'intérieur d'un répertoire public / que vous dites à Apache d'héberger. La philosophie de garder un site Web dans / var / www / est très archaïque.
Oli

Avez-vous une structure de répertoires recommandée? Fondamentalement, j'ai ma caisse, puis je dois regrouper cela dans un .tgz. Et puis je dois décompresser cela dans une application de nœud. C'est une application de météores au fait. Je ne sais pas trop où garder ces trois dossiers / fichiers séparés
Scott

@Scott J'ai rencontré ce même problème. Les sous-commandes suivantes du dépôt (dans mon cas) appellent git et essaient de cloner d'autres dépôts. La solution, pour réaligner les clés SSH comme vous l'avez indiqué, était de démarrer le processus sans utiliser sudo. Une grande partie de cette Q&R et de cette discussion de fil est une solution de contournement qui vous fera probablement frapper des murs sur la route.
Jordan Stefanelli

0

Hm, changer le propriétaire du dossier? J'ai déplacé mon dossier www dans / home / nom d'utilisateur, vous pouvez changer son emplacement dans / etc / apache2 / sites-enabled / 000-default


Donc, cela a à voir avec le répertoire dans lequel je stocke mon clone?
Scott

Oui, exactement. Par défaut, /var/wwwne peut pas être écrit.
Joyfulgrind

0

Je suis un peu en retard avec cette réponse, mais j'ai trouvé que pour éviter de saisir le mot de passe à chaque fois, je devais changer le dépôt de https en ssh.

Depuis la section d'aide de Github.com:

La commande git remote set-url modifie une URL de référentiel distant existante.

Ouvrez le terminal.

Remplacez le répertoire de travail actuel par votre projet local.

Listez vos télécommandes existantes afin d'obtenir le nom de la télécommande que vous souhaitez changer.

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

Changez l'URL de votre télécommande de HTTPS en SSH avec la commande git remote set-url.

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

Vérifiez que l'URL distante a changé.

git remote -v

# Vérifier la nouvelle URL distante

origin  git@github.com:USERNAME/REPOSITORY.git (fetch)
origin  git@github.com:USERNAME/REPOSITORY.git (push)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.