web-dev-qa-db-fra.com

Git Push to live server

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.

  • Développeur local: extraire les dernières modifications, apporter des modifications, valider le référentiel local, transmettre au serveur maître
  • Serveur maître: référentiel central, toutes les modifications sont transférées au serveur maître.
  • Serveur Web: les modifications sont extraites du serveur maître lors du déploiement du site Web.

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: ********
44
Petah

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!

36
ralphtheninja

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.

29
aleemb

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
10
Tim Hoolihan

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
4
cmcginty
  1. Ajouter $ git remote add server ssh://server_hostname:/path/to/git/repo à distance
  2. Checkout branche temporaire sur le serveur $ git checkout -b temp
  3. Transférer les modifications $ git Push server
  4. Commander la branche précédente et supprimer la branche temporaire $ 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

1
2upmedia

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

0
Rohan Khude