Git push vivre serveur
Nous avons un site web qui a tous ses PHP/HTML/JS/CSS/etc fichiers stockés dans un dépôt Git.
Nous avons actuellement 3 types d'ordinateurs (ou des cas d'utilisation) pour le référentiel.
- Local développeur: tirez derniers changements, de faire des changements, de s'engager sur locaux repo, pousser à serveur maître
- Serveur maître: référentiel central, tous les changements sont poussés vers le serveur maître
- Serveur Web: les changements sont tirés vers le bas à partir du serveur maître lors du déploiement du site web
Donc, actuellement, nous avons:
local: git push origin master
local: password: ********
local: ssh [email protected]
webserver: password: ********
webserver: cd ~/domain.com/
webserver: git pull origin master
Donc ma question est: est-il possible que mon ordinateur, je peux pousser tout droit vers le serveur web?
ie.
local: git push origin master
local: password: ********
local: git push webserver master
local: password: ********
- double possible de déploiement d'un projet à l'aide de la commande Git push. Une bonne possibilité est git config recevoir.denyCurrentBranch updateInstead sur la télécommande.
Vous devez vous connecter pour publier un commentaire.
Oui vous pouvez appuyer directement sur votre serveur, mais je ne le recommande pas car vous ne devez pousser vers des dépôts cloné avec l'option --bare argument. J'aimerais utiliser la commande git un système d'accroche pour laisser le principal référentiel de mettre à jour automatiquement le repo sur le serveur web. Découvrez la post-mise à jour crochet:
http://git-scm.com/docs/githooks
Ce script pourrait à son tour de connexion au serveur web via ssh et faire
De cette façon, vous avez seulement besoin de se concentrer sur poussant vers le serveur central et n'ont pas de soins sur le serveur web, il sera toujours mis à jour une fois une poussée a été faite. Si vous pouvez automatiser quelque chose, puis l'automatiser 🙂
J'ai même trouvé un article intéressant pour vous connectant via ssh dans un script (si vous devez utiliser un mot de passe, c'est trivial si une clé ssh a été le programme d'installation):
http://bash.cyberciti.biz/security/expect-ssh-login-script/
Espérons que cette aide!
J'ai eu la même requête et n'est pas satisfait avec le haut-voté réponse ici, suivaient git-site-howto qui décrit le processus assez bien et est de l'OMI beaucoup plus propre et plus rapide approche.
TL;DR,
git init --bare
pour créer une nouvelle repo sur votre serveur web où vous allez pousser vos modifications à partir de votre machine de dev. Quand le web repo reçoit vos modifications, il déclenche l'après-recevoir crochet, puis copie les fichiers à la racine de votre serveur web.J'aime cette approche parce que le post-recevoir crochet fait le travail sur votre serveur afin de votre machine locale peut pousser beaucoup plus rapide et libre d'elle-même. Cela le rend également très facile d'installation à distance de suivi pour une branche particulière. Vous pouvez donc avoir une branche appelée
production
de mettre à jour votre serveur web, tandis que votre maître continue à être pour le développement et un lien vers votre repo git ailleurs.Remarque: vous devez exécuter
git config receive.denycurrentbranch ignore
sur votre serveur web repo pour supprimer une alerte sur votre boîte de dev lors de la poussée.post-receive
fichier.sudo -u <username> -H sh -c "GIT_WORK_TREE=/path/to/live git checkout -f"
Regarder les urls git partie de http://www.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git-push.html
si vous essayez:
AJOUTÉ:
Je pense qu'une partie de ce qu'on vous demande, c'est comment faire pour avoir plusieurs dépôts distants.
qui vous permet d'exécuter:
Je pense que la fonction que vous cherchez est décrit ici: http://debuggable.com/posts/git-tip-auto-update-working-tree-via-post-receive-hook:49551efe-6414-4e86-aec6-544f4834cda3
De
local
vous pouvez ajouter le serveur à distance, tout comme vous le feriez avec tout autre:Maintenant, quand votre prêt à pousser, tu peux faire:
$ git remote add server ssh://server_hostname:/path/to/git/repo
$ git checkout -b temp
$ git push server
$ git checkout - # shorthand for previous branch, git checkout @{ -1}
$ git branch -d temp
J'ai plus d'informations ici: https://medium.com/@2upmedia/git-push-to-live-server-5100406a26
Avant de déployer les changements locaux, vérifier si quelque chose a changé sur le serveur cible.
Ajouter au script de déploiement pour s'assurer que rien n'a changé sur le serveur:
Sera vide si il y a des fichiers inchangés, plus facile que l'analyse git status