Git: extraction automatique du référentiel?


90

Existe-t-il un moyen de configurer git de manière à ce qu'il écoute les mises à jour d'un référentiel distant et qu'il tire chaque fois que quelque chose change? Le cas d'utilisation est que je souhaite déployer une application Web en utilisant git (donc j'obtiens le contrôle de version de l'application déployée) mais que je souhaite placer le dépôt git «central» sur Github plutôt que sur le serveur Web (l'interface de Github est tellement sympa) .

Quelqu'un a-t-il fait fonctionner cela? Comment Heroku fait-il cela? Mon Google-fu ne me donne aucun résultat pertinent.

Réponses:


48

Git a des "hooks", des actions qui peuvent être exécutées après d'autres actions. Ce que vous semblez rechercher, c'est le "crochet post-réception". Dans l'administrateur github, vous pouvez configurer une URL de post-réception qui sera consultée (avec une charge utile contenant des données sur ce qui vient d'être poussé) chaque fois que quelqu'un pousse vers votre dépôt.

Pour ce que ça vaut, je ne pense pas que l'extraction automatique soit une bonne idée - et si quelque chose ne va pas était poussé dans votre succursale? J'utiliserais un outil comme capistrano(ou un équivalent) pour de telles choses.


10
Mon cas d'utilisation prévu était d'avoir un repo / branche séparé pour l'étape de développement "testing and messing around", et d'avoir un repo spécial "push to production" que je pousse une fois que je suis sûr que tout fonctionne. J'utilise essentiellement Git pour faire avec rsync, sauf qu'il garde un journal de toutes les versions déployées et que je pourrais facilement revenir à une version précédente. L'avantage par rapport à quelque chose de plus hardcore comme capistrano est que je n'aurais pas à apprendre un tout nouvel outil pour ce qui est (pour le moment) un très petit projet.
Li Haoyi

L'authentification Webhook ajoute des problèmes de sécurité et de complexité supplémentaires, de sorte que les solutions basées sur pull ont toujours leurs avantages. Le contrôle de version de version peut être effectué avec des balises pour éviter un déploiement accidentel.
lz96

21

Sur unix-likes, vous pouvez créer un travail cron qui appelle "git pull" (tous les jours ou chaque semaine ou autre) sur votre machine. Sous Windows, vous pouvez utiliser le planificateur de tâches ou la commande "AT" pour faire la même chose.


3
Ce n'est pas une bonne façon d'utiliser Git.
plongée profonde

26
@deepdive Pourquoi pas? Imaginez que vous avez un petit Rasperry Pi chez vous et aucune adresse IP statique disponible. Quelle autre option avez-vous pour exécuter une tâche cron ou runwhen?
kaiser le

2
Ce n'est pas une bonne idée. Il veut que les changements soient appliqués immédiatement après avoir poussé.
boi_echos

10
L'OP demande spécifiquement une méthode qui écoute les mises à jour d'un référentiel distant et qui extrait chaque fois que quelque chose change . Cette solution serait simplement extraite du référentiel de temps en temps, donc pour qu'elle soit efficace, l'intervalle devrait être très court, conduisant à un grand nombre de demandes d'extraction redondantes.
Boaz

3
Un moyen rapide de faire cela sans changer l' onglet Cron: while true; do git pull; sleep 10; done. Cela fera une git pulltoutes les 10 secondes ...
JakeD

3

Il existe des programmes d'intégration continue comme Jenkins ou Bamboo, qui peuvent détecter les validations et déclencher des opérations telles que la construction, le test, l'empaquetage et le déploiement. Ils font ce que vous voulez, mais ils sont lourds de dépendances, difficiles à configurer et à la fin, ils peuvent utiliser une vérification périodique contre le dépôt git, ce qui aurait le même effet que d'appeler git pull by cron toutes les minutes.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.