Git pull dans un environnement Linux change le propriétaire des fichiers


12

Pourquoi chaque fois que j'exécute un git pullsur mon serveur en direct, le propriétaire des fichiers est changé? Je continue de faire manuellement un chown john:john index.php.

Que dois-je changer pour que, lorsque je le fais git pull, le propriétaire des fichiers soit automatiquement ou reste john?


1
Le johnpropriétaire du répertoire actuel est-il?
user000001

Oui, John est le propriétaire de l'annuaire :)
PinoyStackOverflower

1
Quel utilisateur fonctionne git pull?
cuonglm

@Gnouc root user, je suis connecté sur notre serveur live via SSH en tant qu'utilisateur root :)
PinoyStackOverflower

Réponses:


11

Lorsque vous utilisez git pull(ce qui équivaut à git fetch; git merge), git mettra à jour les fichiers sans changer de propriétaire (git ne stocke pas ces informations). Mais s'il y a de nouveaux fichiers à créer, l'utilisateur actuel sera défini comme propriétaire.

Il existe différentes solutions pour résoudre ce problème. Le plus simple est probablement d'ajouter un post-updatehook (dans votre .git/hooksrépertoire) pour appeler automatiquement chown john:john . -Raprès fusion / pull ( voir cette solution SO pour un exemple ).

Les solutions alternatives sont:

  • Exécuter en git pulltant qu'utilisateur john au lieu de root (cela nécessitera des autorisations d'écriture sur john pour le répertoire .git).
  • Créez un hook pour effectuer le déploiement, qui utilisera soit john en tant qu'utilisateur, soit effectuera le chown après la mise à jour (vous devrez donc le faire git pullà l'intérieur du post-receivehook du repo nu).

Et si vous faites en git fetchtant que root puis en git mergetant qu'utilisateur john? John aura-t-il toujours besoin d'autorisations en écriture pour le .gitrépertoire?
Wildcard

Oui, la plupart du temps. git fetchen tant que root, les nouveaux fichiers dans .git / objects` peuvent avoir root en tant que propriétaire. git mergecomme l'utilisateur john tentera (la plupart du temps) d'écraser au moins .git/indexet .git/HEAD(qui pourrait être supprimé / créé à chaque changement, je suppose), et d'écrire quelques fichiers .git/objects/. + tout nouveau fichier dans votre répertoire de travail. Il y a peut-être des exceptions avec la fusion rapide par exemple.
Asenar
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.