Question

Je souhaite utiliser git pour gérer certaines données sur un serveur distant. Par conséquent, j'y ai configuré un référentiel non-nu . Je peux y accéder sans problèmes, et le référentiel lui-même est mis à jour, mais les fichiers réels ne sont pas modifiés / ajoutés / supprimés. Je dois ssh dans le serveur et faire un

git reset --hard HEAD

pour que la structure de fichier soit réellement mise à jour.

Que faire?

Était-ce utile?

La solution

Vous ne devriez pas faire ça. Il est recommandé d'avoir des référentiels nus. En d'autres termes, aucun fichier extrait, juste le répertoire .git lui-même. Vous pouvez ensuite extraire le référentiel d'un autre emplacement sur votre serveur, par exemple votre racine Web. De cette façon, vous obtenez:

  • Git bonne pratique. Selon la documentation Git, vous pouvez obtenir des "résultats inattendus". si vous ne le suivez pas. Quiconque a fait une bonne partie de la programmation sait que des "résultats inattendus" Ce code signifie "va probablement manger vos enfants et devrait être évité à tout prix".

  • meilleure sécurité si vous prévoyez de rendre les fichiers extraits sur le serveur accessibles depuis un serveur Web.

  • Modifications locales sur votre code extrait et possibilité de modifier rapidement le code extrait en direct. Vous pouvez essayer de le faire directement sur le référentiel, mais ce serait plus compliqué et plus sujet aux erreurs.

  • Possibilité de mettre à jour votre référentiel de serveur indépendamment de la mise à jour de votre code de service réel. C’est très important si vous travaillez à distance et que vous devez envoyer quelque chose au serveur, puis continuer à travailler avant qu’il soit prêt pour votre service en direct, ou si vous avez modifié votre code de service en direct (par exemple, des paramètres de configuration différents). ) et doivent fusionner ces modifications avec celles du référentiel, mais ne peuvent le faire pour l'instant.

Je recommanderais les étapes suivantes:

  • Suivez la documentation git pour configurer un référentiel nu
  • Extraire le code de votre dépôt dans votre répertoire cible de service réel
  • Configurez un crochet Git (le post-commit devrait être le bon IIRC) pour mettre à jour votre service réel lors de la mise à jour du référentiel. Il devrait probablement aller dans le répertoire du service réel, et faire un git pull --rebase, et peut-être définir des permissions de fichiers.
  • Poussez votre code dans le dépôt depuis votre boite de développement à partir de maintenant.

Autres conseils

Heureusement, cela est maintenant supporté directement dans git lui-même! Vous pouvez trouver les détails dans cette réponse, que je viens de voter:

https://stackoverflow.com/a/38363683/85360

Il est recommandé de configurer la télécommande avec

.
git config receive.denyCurrentBranch updateInstead

afin que les transferts donnent une copie de travail mise à jour!

Utilisez un hook post-mise à jour:

hooks

Vous pouvez y exécuter ce que vous voulez sur chaque mise à jour.

Git Version 1.9.1
Ubuntu Server 14.04 LTS
Serveur LAMP

J'ai configuré mon serveur LAMP pour qu'il mette à jour le répertoire de travail de mon dépôt Git chaque fois qu'un de mes développeurs Web envoie une modification au serveur. J'ai remarqué que le journal noterait les nouveaux commits, mais ne mettrait pas à jour le répertoire de travail. Au lieu de faire cela manuellement (git checkout -f) pour chaque mise à jour, ceci peut être configuré automatiquement pour le faire après la réception d'un push.

  1. Dans votre " .git " répertoire, allez dans le "& hook; hooks" " dossier.
  2. Créez un fichier nommé "post-réception". dans les "crochets" dossier avec ce contenu:

    #! / bin / sh

    # Met à jour le répertoire de travail après avoir reçu un push des clients distants.
     # Ceci devrait être dirigé vers le répertoire de travail de git.

    GIT_WORK_TREE = / var / www / dev_site git checkout -f

  3. Activez les autorisations nécessaires pour exécuter le fichier en tapant "chmod + x après réception". dans les "crochets" dossier.

Il va maintenant mettre à jour le répertoire de travail lorsque les commits sont poussés dans le référentiel Git. Mon site affiche désormais les modifications lorsque je le visite dans un navigateur.

Mon répertoire de travail est / var / www / dev_site

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top