2010-03-08 5 views
10

Hier ist, was ich versuche zu tun:Automatisches Ziehen auf Remote-Server mit Git Push?

Ich habe ein GitHub-Repository, von dem ich einen Teil davon sichtbar machen möchte. Im Moment habe ich das Repository auf meinem eigenen Server geklont und es funktioniert gut, aber um es auf dem neuesten Stand zu halten, muss ich mich manuell anmelden und die letzten Änderungen vornehmen.

Ich bin mir nicht sicher, ob dies die beste Idee (oder der beste Ansatz) ist, aber ich möchte den Remote-Server automatisch ziehen, wenn jemand in das Repository schiebt. GitHub macht es einfach genug, ein Skript auszuführen, wenn jemand etwas schiebt, aber ich bin mir nicht sicher, wie ich es ziehen soll, wenn jemand das tut.

Ich benutzte PHP für die Einfachheit, aber nur so etwas wie git pull funktioniert natürlich nicht wegen der Berechtigungen. Ist das eine schlechte Idee oder gibt es eine andere Möglichkeit zu erreichen, was ich tun möchte? Dies scheint wie eine gemeinsame Einrichtung, aber ich war mir nicht sicher.

Danke.

Antwort

2

Wenn es so einfach ist Skript Push zu laufen, können Sie Setup-Haken drücken:

  • von GitHub zu einem kahlen (leer worktree) Repo auf Ihrem Webserver
  • von bloßen Repo auf Ihrem Webserver an Ihrem „live“ Repo (mit einem worktree Ihrer Website darstellt)

können Sie dann, dass in Verbindung mit einem Haken auf „lebt“ Repo selbst zu aktualisieren (durch ein „git merge“, Verschmelzen des Inhalts Ihres nackten Repo mit y unser "Live" -Repo), wann immer dein nackter Repo irgendetwas antreibt.

Sie erhalten den gewünschten Effekt: Jeder Push zu Ihrem GitHub Repo (für einen bestimmten Zweig nehme ich an) wird eine Aktualisierung auf Ihrem "Live" Webserver Repo auslösen.

1

Ich habe etwas gemacht, das fast genau so funktioniert, nur dass das "Remote" -Repo, das den Push empfängt, sich auf demselben Rechner befindet wie das Repo, das danach zieht. Es ist wahr (und wichtig), dass genau die gleiche Gruppe von Benutzern Berechtigungen für beide Repositories hat. (Aber das sollte in Ordnung sein; Sie wollen nicht, dass zufällige Leute Ihren Repo schieben.) Jedenfalls habe ich einfach den git post-update hook ein Shell-Skript aufrufen, das den Pull für mich erledigt. Das eine schwierige Bit ist, dass Sie die Umgebung reinigen müssen (ich habe env -i verwendet, oder Sie können Git-bezogene Variablen deaktivieren), sonst wird der Pull durcheinander gebracht.