Git: Auto Pull aus Repository?

89

Gibt es eine Möglichkeit, git so einzurichten, dass es auf Updates von einem Remote-Repo wartet und bei jeder Änderung abgerufen wird? Der Anwendungsfall ist, dass ich eine Webanwendung mit git bereitstellen möchte (damit ich die Versionskontrolle der bereitgestellten Anwendung erhalte), aber das "zentrale" git-Repo auf Github und nicht auf dem Webserver platzieren möchte (die Benutzeroberfläche von Github ist einfach soooo nett). .

Hat jemand das zum Laufen gebracht? Wie macht Heroku das? Mein Google-Fu liefert mir keine relevanten Ergebnisse.

Li Haoyi
quelle

Antworten:

47

Git hat "Hooks", Aktionen, die nach anderen Aktionen ausgeführt werden können. Was Sie zu suchen scheinen, ist "Post-Receive-Hook". Im Github-Administrator können Sie eine Post-Receive-URL einrichten, die jedes Mal aufgerufen wird (mit einer Nutzlast, die Daten darüber enthält, was gerade gepusht wurde), wenn jemand auf Ihr Repo pusht.

Für das, was es wert ist, halte ich Auto-Pull nicht für eine gute Idee - was ist, wenn etwas Falsches in Ihre Filiale geschoben wurde? Ich würde ein Werkzeug wie capistrano(oder ein Äquivalent) für solche Dinge verwenden.

ksol
quelle
10
Mein geplanter Anwendungsfall war es, ein separates Repo / Zweig für die Phase "Testen und Herumspielen" des Entwicklers und ein spezielles Repo "Push to Production" zu haben, auf das ich nur pushe, wenn ich sicher bin, dass alles funktioniert. Ich verwende Git im Grunde genommen, um mit rsync zu tun, außer dass es ein Protokoll aller Versionen führt, die bereitgestellt werden, und ich könnte problemlos auf eine frühere Version zurücksetzen. Der Vorteil gegenüber etwas Hardcore wie Capistrano ist, dass ich für ein (ab sofort) wirklich kleines Projekt kein ganz neues Tool lernen müsste.
Li Haoyi
Die Webhook-Authentifizierung erhöht die Sicherheit und Komplexität zusätzlich, sodass Pull-basierte Lösungen immer noch ihre Vorteile haben. Die Versionskontrolle der Freigabe kann mit Tags erfolgen, um eine versehentliche Bereitstellung zu vermeiden.
lz96
21

Unter Unix-Likes können Sie einen Cron-Job erstellen, der "git pull" (jeden Tag oder jede Woche oder was auch immer) auf Ihrem Computer aufruft. Unter Windows können Sie den Taskplaner oder den Befehl "AT" verwenden, um dasselbe zu tun.

SigTerm
quelle
3
Keine richtige Art, Git zu benutzen.
Deepdive
24
@deepdive Warum nicht? Stellen Sie sich vor, Sie haben einen kleinen Rasperry Pi in Ihrem Haus und keine statische IP verfügbar. Welche andere Option haben Sie dann, wenn Sie einen Cron ausführen oder einen Job ausführen?
Kaiser
2
Das ist keine gute Idee. Er möchte, dass die Änderungen sofort nach dem Drücken angewendet werden.
Boi_echos
9
Die OP wird für ein Verfahren speziell fordern , dass Streams für Updates von einem Remote - Repo und ziehen wird , wenn sich etwas ändert . Diese Lösung wird nur von Zeit zu Zeit aus dem Repository abgerufen. Damit sie effektiv ist, muss das Intervall sehr kurz sein, was zu einer Vielzahl redundanter Pull-Anforderungen führt.
Boaz
3
Ein schneller Weg, dies zu tun, ohne die Registerkarte cron zu ändern : while true; do git pull; sleep 10; done. Dies wird git pullalle 10 Sekunden tun ...
JakeD
3

Es gibt kontinuierliche Integrationsprogramme wie Jenkins oder Bamboo, die Commits erkennen und Vorgänge wie Erstellen, Testen, Packen und Bereitstellen auslösen können. Sie tun, was Sie wollen, aber sie sind voller Abhängigkeiten, schwer zu konfigurieren und am Ende verwenden sie möglicherweise eine regelmäßige Überprüfung des Git-Repositorys, was den gleichen Effekt hätte, als würde sie jede Minute Git Pull by Cron aufrufen.

Pavel Niedoba
quelle
0

Ich weiß, dass diese Frage etwas alt ist, aber Sie können das Windows-Protokoll und Git verwenden, um Ihr Projekt mithilfe eines Webhooks und PHP automatisch zu ziehen (vorausgesetzt, Ihr Projekt umfasst einen Webserver. Siehe meine Zusammenfassung hier: https://gist.github.com/ upggr / a6d92e2808e9628ebe0d01fd93569f4a

Ioannis Kokkinis
quelle