Nous avons un site Web qui contient tous ses fichiers PHP/HTML/JS/CSS/etc stockés dans un référentiel Git.
Nous avons actuellement 3 types d'ordinateurs (ou cas d'utilisation) pour le référentiel.
Donc actuellement nous:
local: git Push Origin master
local: password: ********
local: ssh [email protected]
webserver: password: ********
webserver: cd ~/domain.com/
webserver: git pull Origin master
Ma question est donc la suivante: y at-il un moyen de transmettre directement depuis mon ordinateur local au serveur Web?
c'est à dire.
local: git Push Origin master
local: password: ********
local: git Push webserver master
local: password: ********
Oui, vous pouvez envoyer directement à votre serveur Web, mais je ne le recommanderais pas, vous ne devriez utiliser que Push vers des référentiels clonés avec l'argument --bare. J'utilisais le système git hook pour laisser le référentiel principal mettre à jour automatiquement le référentiel sur le serveur Web. Découvrez la connexion post-update:
http://git-scm.com/docs/githooks
Ce script pourrait à son tour se connecter au serveur Web via ssh et faire
cd ~/domain.com/
git checkout master
git pull Origin master
De cette façon, vous ne devez vous concentrer que sur la transmission au serveur central sans vous soucier du serveur Web. Il sera toujours mis à jour une fois le Push effectué. Si vous pouvez automatiser quelque chose, automatisez-le :)
J'ai même trouvé un article intéressant sur la connexion via ssh dans un script (si vous devez utiliser un mot de passe, cela est trivial si une clé ssh a été configurée):
http://bash.cyberciti.biz/security/expect-ssh-login-script/
J'espère que cela t'aides!
J'avais la même requête et je ne suis pas satisfaite de la réponse actuellement votée par les votes les plus votés. J'ai fini par suivre git-website-howto , qui décrit assez bien le processus et l'OMI est une approche beaucoup plus propre et plus rapide.
TL; DR, git init --bare
pour créer un nouveau dépôt sur votre serveur Web sur lequel vous allez transmettre vos modifications à partir de votre ordinateur dev. Lorsque le référentiel Web reçoit vos modifications, il déclenche le hook post-réception qui copie ensuite les fichiers dans votre racine Web.
J'aime cette approche car le hook de post-réception effectue le travail sur votre serveur afin que votre machine locale puisse pousser beaucoup plus vite et se libérer. Cela facilite également la configuration du suivi à distance pour une branche donnée. Vous pouvez donc avoir une branche appelée production
pour mettre à jour votre serveur Web, tandis que votre maître continue d’être dédié au développement et d’être relié à votre dépôt Git ailleurs.
Remarque: vous devez exécuter git config receive.denycurrentbranch ignore
sur le référentiel de votre serveur Web pour supprimer un avertissement sur votre boîte de développement local lorsque vous appuyez sur.
Examinez la partie des URL de http://www.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git-Push.html
alors vous essayez:
git Push ssh://[email protected]/~admin/domain.com/ master
ADDED: Je pense qu'une partie de ce que vous demandez est de savoir comment avoir plusieurs référentiels distants.
git remote add webserver ssh://[email protected]/~admin/domain.com/
cela vous permet de lancer:
git Push Origin master
git Push webserver master
Je pense que la fonctionnalité que vous recherchez est décrite 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 Web en tant que télécommande, comme vous le feriez avec tout autre:
git remote add webserver admin@webserver:/path/to/repo.git/
# Push only master branch by default
git config remote.webserver.Push master
Maintenant, quand vous êtes prêt à pousser, vous pouvez simplement faire:
git Push webserver
$ git remote add server ssh://server_hostname:/path/to/git/repo
à distance$ 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 de base ici: https://medium.com/@2upmedia/git-Push-to-live-server-5100406a26
Avant de déployer les modifications locales, vérifiez si quelque chose a changé sur le serveur cible.
Ajoutez au script de déploiement pour vous assurer que rien n'a changé sur le serveur:
$ git ls-files -dmo --exclude-standard
Sera vide s'il y a des fichiers non modifiés, plus facile que d'analyser le statut de git