2009-05-19 15 views
10

Situation:site de mise à jour avec une seule commande (git push) au lieu de glisser FTP déposer

  • J'ai une copie locale d'un site Web
  • J'ai un serveur que j'ai accès SSH à

Que dois-je faire?

  • Commit localement jusqu'à ce que je suis content de mon code
  • Faire des branches localement
  • Avoir une branche principale qui est celle qui doit être poussé au serveur
  • mise à jour du site Web en utilisant une seule commande (git push origin master)

Si je configure un git repo localement en utilisant git init, puis que j'appuie sur un dossier du serveur, cela ne fonctionne pas. Lorsque je FTP sur le serveur pour vérifier les fichiers, ils sont réellement là. Lorsque je SSH dans le serveur et faire l'état git, ce n'est pas propre, même si cela devrait être puisque je viens de pousser sur le serveur.


étapes que je fais:

  1. Faire un nouveau dossier sur mon ordinateur (mkdir folder_x)
  2. Allez dans ce dossier (cd folder_x)
  3. Mettre en place un nouveau dépôt git là (git init)
  4. (le dépôt git a été configuré avec succès)
  5. Poussez le référentiel vers le serveur en utilisant le maître d'origine git push (où l'origine est s et comme utilisateur: [email protected]) ​​
+0

dupliquer http://stackoverflow.com/questions/3728054/git-push-to-live-server – cmcginty

+0

duplication possible de [Déployer un projet en utilisant Git push] (http://stackoverflow.com/questions/279169/ deploy-a-project-using-git-push). [git config receive.denyCurrentBranch updateInstead] (http://stackoverflow.com/a/28381235/895245) sur la télécommande est une bonne possibilité. –

Répondre

12

Vous devez écrire un crochet après réception qui court git checkout -f après le dépôt git à distance reçoit un coup de pouce. Voir Using Git to manage a web site pour plus de détails.

+1

cela semble supposer que je ne travaille pas réellement sur mon serveur web. Donc tout travail effectué là-bas est perdu – gman

+0

Avec Git 2.3 vous n'avez plus besoin de ce hook, vous pouvez faire 'git config receive.denyCurrentBranch updateInstead'. Voir https://github.com/blog/1957-git-2-3-has-been-released. – Aurelien

+1

Je pense que le commentaire de @Aurelien devrait être la réponse acceptée! Très belle solution! –

1

Lorsque vous exportez vers un référentiel git, il ne met pas à jour les fichiers de travail de ce référentiel. Généralement quand vous poussez, vous devriez pousser vers un référentiel nu --- qui semble être la façon dont ils ont l'intention de pousser au travail.

Pour l'un de mes projets (locaux), j'ai écrit un script pour extraire automatiquement le dernier sous-répertoire «ui» lorsque je place mon travail dans un repo de déploiement. Il est incorporé dans une réponse précédente ici: Developing Django projects using Git

Vous pouvez également simplement faire en sorte que le post-update hook sur le serveur fasse un "git reset --hard master" si quelqu'un pousse une mise à jour vers master, et utilise un non-nu repo plutôt que d'avoir une zone séparée pour les fichiers extraits.

0

J'utilise le crochet post-mise à jour comme indiqué dans cette FAQ: http://git.or.cz/gitwiki/GitFaq#non-bare

Il mettra à jour votre arbre de travail si vous avez configuré la prise en pension à distance comme « nue ».

0

Version Git 1.9.1
Ubuntu Server 14.04 LTS
Serveur LAMP

Je configure mon serveur LAMP pour mettre à jour mon répertoire de travail de mon repo Git chaque fois qu'un de mes développeurs Web appuie une modification sur le serveur. J'ai remarqué que le journal noterait les nouveaux commits, mais ne mettrait pas à jour le répertoire de travail. Au lieu de le faire manuellement (git checkout -f) pour chaque mise à jour, il est possible de le faire automatiquement après avoir reçu un push.

  1. Dans votre répertoire ".git ", allez dans le dossier "crochets".
  2. Créez un fichier nommé "post-recevoir" dans le dossier "crochets" avec ce contenu:

    #/bin/sh

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

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

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

Il va maintenant mettre à jour le répertoire de travail lorsque les validations sont envoyées au dépôt Git. Mon site affiche maintenant les modifications lorsque je le visite dans un navigateur.

Dans cet exemple, mon répertoire de travail est "/var/www/dev_site". Changez cela en conséquence à l'endroit où votre Repo est.

Veuillez noter que ce Repo n'est pas un simple Repo. Un Repo vide n'a pas de répertoire de travail qu'un serveur Web peut lire.