Wie Hänge ich ein git pull auf die Fernbedienung?
Gibt es einen Weg, um Haken, wenn ein git pull geschieht auf der Fernbedienung (ähnlich wie bei einem pre-receive und post-receive). Im Grunde möchte ich in der Lage sein, zu bewirken, dass der remote zu Begehen, was auch immer es hat, wenn es ein ziehen.
In meiner situation, was auch immer live auf der Fernbedienung ist eine maßgebliche Quelle, die dann eventuell geändert werden, ohne einen git-commit. Ich möchte sicherstellen, dass, wenn ich ziehen Sie ich bin immer in der Lage, um die neueste was ist Leben.
- Also, Sie senden ein commit zu einem remote-repo-und wollen das remote-repo zu Begehen, kurz bevor Ihre änderungen werden zusammengeführt, es?
- Nicht ganz. Eher so: 1: auf dem remote fileA.txt wird bearbeitet 2: auf örtlicher ich führe 'git pull remote', Was ich möchte, ist für das Bearbeiten fileA.txt um commit ' ed, so dass mein ziehen bringt sich die änderungen, die gemacht wurden.
- Warum nicht Bearbeiten fileA.txt lokal, Begehen Sie, und führen Sie den ziehen Sie auf dem remote-server? Veränderungen beginnen sollte, auf der Entwickler die lokale setup-und trickle-bis zur Produktionsumgebung, nicht die andere Weise herum.
- Die Fernbedienung ist keine Produktionsumgebung, nur ein anderes Umfeld. Es ist ein "live" - Kopie von meinem repo, dass es ausgesetzt über die web-eingeschränkt-editing-Fähigkeit. Die live-web-basierte Bearbeitung ist wenn ich zugreifen müssen oder gelegentlich eine Datei ändern, und ich kann nicht bringen Sie nach unten eine vollständige repo (wie mit einer computer-Freunde).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten, zur Beantwortung Ihrer eigentlichen Frage: es gibt keine hooks aufgerufen, auf der remote-Seite, wenn jemand ruft. (Wenn jemand zieht, alle die Fernbedienung weiß ist, dass Sie holte aus - er weiß nicht, ob Sie lief
git pull
,git fetch
,git remote update
...)Als für Ihre aktuelle situation: ich Stimme mit Magnus, es wäre das beste, einfach zu haben, begeht nach bearbeitet, oder gelingt das nicht, haben Sie irgendeine Art von periodischen Aufgabe (cronjob?) Prüfung auf änderungen, und verpflichtet, wenn es gefunden wird. Wenn Sie nicht mögen, entweder von denen Wahlen, Sie sind Links mit einer Straffung Dinge, so dass es schnell und einfach für Sie, um trigger a commit in das repository nur vor ziehen.
Außerdem würde ich vorschlagen, dass nicht über ein repository mit einer Arbeit, die den Baum als Ihren kanonischen repository. Es ist zu Fragen, für Probleme, wenn Sie jemals brauchen, um push-to-es. Stattdessen könnte man ein bare repository canonical, die Ihre live-repository schiebt, nach der Begehung, und installieren Sie einen post-receive-hook in das bare-repository aktualisieren das repository wenn nötig.
Leider git nicht nativ Versorgung Haken, es ist ein perfekter Anwendungsfall zu wollen, um etwas zu prüfen, bevor ein pull/fetch.
Ich weiß nicht, ob dein "remote" ist auf einem lokalen Computer, aber wenn nicht, haben Sie einen Blick auf gitolite die Haken, die dazu bestimmt sind, die exakt für diese:
Aus der v2 gitolite docs:
Für v3 gitolite, hier sind die docs über Trigger. Die Dokumentation ist ein bisschen kryptisch, aber hier ist, wie es funktioniert:
in ~/.gitolite.rc hinzufügen (auf dem globalen Gültigkeitsbereich):
PRE_GIT =>
[
'<pre_git_trigger_script_name>'
]
in der gleichen Datei schaue auf die Zeile, so dass zu setzen LOCAL_CODE und legen Sie es auf, wo immer Sie möchten
In dem Verzeichnis, das Sie für LOCAL_CODE, erstellen Sie ein Unterverzeichnis namens 'Trigger' und erstellen ein Skript namens
<pre_git_trigger_script_name>
mit was auch immer Sie möchten, an diesem Punkt zu tun... (stellen Sie sicher, tun, um:chmod +x <pre_git_trigger_script_name>
laufen
gitolite setup
test && einen guten Tag haben
update: Eigentlich mit gitolite, ich denke, Sie könnten die pre-git-trigger etwas wie das drängen auf eine unexisting Zweig und Haken Sie dann auf pre-erhalten Sie in Ihrer non-bare repository auf ablehnen drücken, aber zu tun
git add --all . && git commit -m"autocommit" && push gitolite
im Prozess. Das ist praktisch, wenn Sie nicht zulassen möchten, dass der gitolite-hosting-Benutzer Berechtigungen zum ausführen von Befehlen direkt in Ihrem non-bare repository.Ich habe keine direkte Erfahrung mit git hooks und auf dieser Seite kann helfen, aber es sieht nicht wie Sie gehen, um in der Lage sein, es zu tun.
Desto einfacher (und besser IMO) Lösung wäre die Verwendung einer anderen repo als der Produktionsumgebung, die als die maßgebliche Quelle. Können Sie dies tun? Einer Produktionsumgebung wird nur sehr selten verwendet wird als die maßgebliche Quelle, da die aktuellste und stabilste, sind zwei sehr verschiedene Dinge...
FYI, ich nur immer führen Sie ein git pull oder git status, wenn Sie in einer Produktionsumgebung. Alle änderungen werden auf meinem lokalen repo, getestet, verpflichtet sich, schob github, dann zog Sie nach unten, um die Produktionsumgebung.
UPDATE
Ich sollte darauf hinweisen, dass eine der großen stärken und Besonderheiten von git ist, dass es ein verteilt source-control-system. Als solche, es gibt nicht wirklich so etwas wie eine autoritative Quelle.
Ich denke, man kann es nicht mit Haken, für das, was ich verstehe, Lesen Sie die Haken' doc es gibt keinen Haken, der passt in deine Anforderung.
Wenn ich etwas wie das, was Sie wollen, ich möchte ein Skript erstellen, auf 'remote', die stündlich ausgeführt wird und prüft, ob eine Datei wurde verpasst (git status) und verpflichten sich, alle (git commit-a -m "Auto commit").
Es ist nicht etwas, was ich je getan habe vor, aber Sie können ausführen von bash-Skripten aus in php:
http://www.devx.com/opensource/Article/40785
http://us2.php.net/function.exec
Ermöglichen sollte, Sie zu Begehen, und drücken Sie eine Reihe von änderungen über ein PHP-script. Chuck eine Schnittstelle, über die er oder Sie integrieren es in Ihre bestehende Bearbeiten, und Sie sollten gut zu gehen.
Wer/was ist das Bearbeiten dieser Datei? Ob es etwas geändert, wenn das jemand ändert etwas an einem Ort, das muss sein, ausgelöst durch etwas, was bedeutet, können Sie automatisieren. Wenn diesem etwas passiert und die Datei ist gespeichert, da Sie löst das commit. Der commit muss getan werden, und irgendwann kann man es ebenso gut in dieser Zeit.