Git, auto-push lors d'un commit

a marqué ce sujet comme résolu.

Bonsoir,

J’aurais aimé savoir s’il était possible de mettre automatiquement à jour un repo git lorsque qu’il y a eu un commit dessus (commit directement sur la branche master, ou un merge).

Car je code un site web, et j’aimerais bien que le serveur dev.domaine.com ce mettent à jour directement lorsque qu’il y a un commit.

Est-ce faisable ?
(Si ça à une importance, je travaille sur la version online de Gitlab).

Oui, mais c’est uniquement pour un environnement de dev :p

Je ne me permettrais pas de faire cela sur de la Prod. C’est juste que j’ai l’habitude de travailler en local, mais pour mon histoire de socket (Je me suis finalement penché sur Flask), ça ne marche pas très bien de tout avoir en local.

Edit: Et pour le Cron, en effet ça doit marcher. Mais ça ne me parait pas très propre. J’ai vu qu’il y avait la possibilité de paramétrer des push sur Gitlab, ça fonctionne comment ?

+0 -0

Salut,

Si tu veux absolument faire ça (même si c’est probablement la pire idée que tu puisses avoir), pourquoi tu n’écris pas un post-commit hook qui fait un push ?

+8 -0

Bonsoir,

J’ai l’impression que tu mélanges deux choses :

  • Le fait d’avoir deux commandes distinctes commit et push ;
  • Et celui de devoir télécharger les nouveaux commits sur les clones du dépôt.

Que souhaites-tu réellement faire ?

Alias bash au pire.

Par contre c’est very very bad practice… Tu perds un peu tout l’intérêt de git en faisant ça.

Edit : pardon j’avais mal compris la question. En fait c’est plutôt un pull que tu veux automatiser ? Pour mettre en prod automatiquement tes commits dès qu’ils sont poussés, c’est ça ? Dans ce cas t’as qu’à faire un cron effectivement..

+1 -0

Edit : pardon j’avais mal compris la question. En fait c’est plutôt un pull que tu veux automatiser ? Pour mettre en prod automatiquement tes commits dès qu’ils sont poussés, c’est ça ? Dans ce cas t’as qu’à faire un cron effectivement..

On parle de git, pusher vers un serveur est equivalent à puller depuis ce serveur.

+0 -0

Bonsoir,

J’ai l’impression que tu mélanges deux choses :

  • Le fait d’avoir deux commandes distinctes commit et push ;
  • Et celui de devoir télécharger les nouveaux commits sur les clones du dépôt.

Que souhaites-tu réellement faire ?

entwanne

Effectivement je me suis mal exprimé, ce n’est non pas à chaque commit mais à chaque push.

Edit : pardon j’avais mal compris la question. En fait c’est plutôt un pull que tu veux automatiser ? Pour mettre en prod automatiquement tes commits dès qu’ils sont poussés, c’est ça ? Dans ce cas t’as qu’à faire un cron effectivement..

On parle de git, pusher vers un serveur est equivalent à puller depuis ce serveur.

adri1

Oui mais je ne développe pas sur mon serveur qui distribue les pages Web… ou alors j’ai pas compris ta phrase

Tu peux avoir plusieurs remotes configurés. Et pousser vers le remote du site web quand tu veux mettre en production.

Juste pour clarifier pour l’OP, c’est exactement ce que je voulais dire par :

On parle de git, pusher vers un serveur est equivalent à puller depuis ce serveur.

Git est complètement décentralisé, il est aberrant de demander à un serveur A distant de puller à chaque push que tu pourrais faire sur un autre serveur B lorsque tu peux soit pusher directement sur A, soit mettre un hook sur B pour pusher sur A.

+0 -0

Git est complètement décentralisé, il est aberrant de demander à un serveur A distant de puller à chaque push que tu pourrais faire sur un autre serveur B lorsque tu peux soit pusher directement sur A, soit mettre un hook sur B pour pusher sur A.

Je comprend mieux. J’étais dans l’optique que mon serveur Gitlab était le serveur de référence.
Donc si j’ajoute mon serveur secondaire dans les remotes et que je fais un git push --all master ça va push sur les deux ?
Et si un autre utilisateur fait un push sur le serveur Gitlab, que je fais un pull sur mon PC, et que je push sur le serveur web, la version sera à jour avec le serveur Gitlab ? (D’après ce que j’ai compris Oui, sinon j’ai loupé un point).

Je vous remercie de ces informations complémentaires.

git push --all va pusher tous les commits/tags/etc qu’il va trouver dans les branches locales sur le remote par défaut. Pour pusher vers ton remote, il faut spécifier son nom à git push.

À part ça, tu as compris.

+2 -0

Oui, et c’est parfaitement logique. Si quelqu’un a pushé quelque chose sur serverA, il faudra bien résoudre les éventuels conflits avant de pusher le tout vers serverB.

+1 -0

Bonsoir,

Je n’ai peut-être pas fait au plus simple, mais j’ai mis un hook post push sur mon serveur. Ce hook lance un script PHP CLI qui fait faire un pull dans le répertoire du site web, et qui lance des commandes en plus. Dans mon cas, les commandes exécutées après le pull, c’est, mettre à jour le schéma de base de donnée et vider les caches de Doctrine et de Symfony.

C’est hyper pratique puisque ça évite de devoir se connecter sur le serveur… adieu l’antique FTP, et plus besoin de se connecter en SSH non plus. Par contre ça implique d’avoir les permissions pour lancer un script, c’est probablement pas gagné chez la plupart des hébergeurs.

J’ai fait le script en PHP parce que je trouve le bash immonde quand ça dépasse quelques lignes, mais on peut le faire dans n’importe quel langage; python et perl sont assurément de bons candidats.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte