2011-01-06 10 views
4

Ich habe eine Website, die ich jedes Mal aktualisieren möchte, wenn ich an ein Remote-Repository drücke. Ich komme aus einem SVN-Hintergrund und versuche immer noch, git herauszufinden.Git: Aktualisierung der Website beim Push-to-Remote-Repository?

Gerade jetzt, ich habe folgendes getan:

  • -Setup ein Git-Repository auf meinem lokalen Rechner die Website enthält.
  • Das (nackte) Repository auf meinen Webserver geklont.

Jetzt bin ich ein bisschen fest. Ich kann die Änderungen an mein blankes Repository auf dem Server übertragen, aber ich habe keine Ahnung, wie ich eine Arbeitskopie des Repositorys in meinem www-Verzeichnis auschecken und automatisch aktualisieren kann, wenn ich mein lokales Repository auf den Server verschiebe. Ich brauche wahrscheinlich ein Hook-Skript, oder?

Verwandte Frage, Deploy PHP using Git, beantwortet teilweise meine Frage, aber ich würde gerne wissen, was das Skript tatsächlich macht.

+0

Warum nicht Sie ein normales Repository anstelle eines nackten auf deinem Server behalten? Und push/serve direkt davon? – Dogbert

+0

@Adam: Ich versuchte das zunächst, aber dann, als ich versuchte zu schieben (git Push-Webserver), habe ich diesen Fehler: remote: error: Standardmäßig wird die Aktualisierung der aktuellen Zweigstelle in einem nicht-bare-Repository verweigert, weil es macht den Index und Arbeitsbaum inkonsistent –

Antwort

6

Das ist für mich gearbeitet, könnte es für Sie arbeiten: A web-focused Git workflow

+0

+1 Es ist eine saubere Lösung, aber ich muss nur erwähnen, dass es erfordert, dass Sie die Informationen zweimal auf Ihrem Host speichern, da es zwei Repositories beteiligt. Ich weiß, das ist der Kompromiss, nur zu sagen :) – ralphtheninja

3

fand ich eine sehr gute (und elegant) Lösung für mich auf der Caius Theory Website

Es beginnt grundsätzlich mit einem nackten Repository und ändert die worktree zum Web-Server-Ordner. Danach verwendet es einen Post-Receive-Hook, um den Arbeitsbaum nach jedem Push, den er empfängt, zu aktualisieren. Ein elegantes und leicht zu befolgendes Verfahren!

Zusätzlich zur Einrichtung in diesem Artikel, den ich ein soft-linked „.git“ Verzeichnis von der Website Position zurück zum git-Repository Standort hinzugefügt:

ln -s /home/caius/git/somesite.git/ /home/caius/vhosts/somesite.com/htdocs/.git 

So kann ich eine anderen Zweig auf der Web-Prüfung kann -server, indem Sie sich anmelden und "git checkout" im Website-Ordner verwenden!

Ich habe auch eine kleine Änderung am Python-Skript "ygit-push-all.py" von here verwendet, um meine mehreren Maschinen zu aktualisieren, die alle denselben Framework-Code mit verschiedenen Konfigurationsdateien verwenden. Sie könnten sogar eine Verzweigung pro Server einrichten (zB Demo/Entwicklung).

Zusätzlich habe ich die folgenden Aliase meiner globalen git config file:

[alias] 
    push-all = !ygit-push-all.py 
    check-all = !sh -c 'git branch -r -v | grep master | awk \"{ print \\$1, \\$2 }\"' 

git push-allalle meine entfernten Standorten

git Check-all aktualisiert wird zeige mir die rev, auf der jede Fernbedienung Master Zweig ist

Verwandte Themen