2012-04-06 4 views
6

Ich versuche, meinen Kopf um Git zu wickeln und Websites mit (oder ohne) bereitzustellen. Ich habe gegoogelt und gesucht und gelesen, kann aber keine Antwort auf meinen speziellen Fall oder meine Bedenken finden. Ich bin noch in der Planungsphase, aber ich würde es von Anfang an richtig machen und einen Workflow finden, der für mich funktioniert. Ich werde versuchen, die Situation so klar wie möglich zu erklären:PHP-Website von Git-Repository bereitstellen

Ich habe eine Remote-VPS, die meine Live-Website auf www.example.com und die Entwicklungsversion auf dev.example.com läuft (sie befinden sich in/var/www/Beispiel/htdocs/und/var/www/Beispiel/Subdomains/dev /).

Entwicklung wird von einem leeren Repository in /opt/git/example.git/ ausgeführt. Im bare Repo gibt es einen Master- und einen Entwicklungszweig. Ich und der andere Entwickler haben beide einen Klon dieses Repository auf unserer lokalen Maschine. Wir ziehen aus der Entwicklungsbranche und arbeiten von dort aus. Die Idee ist, dass dev.example.com aktuellen Code aus dem Entwicklungszweig hat und sobald dies richtig getestet ist, werden wir in Master zusammengeführt, ein Tag hinzugefügt und example.com aktualisiert (im Grunde dieser git flow).

Der erste Ansatz, den ich auf dem Git IRC Kanal gefunden habe, verwendet Hooks, um Repositories zu aktualisieren, aber das fühlt sich sehr einschränkend und manchmal auch unerwünscht an. Ich würde gerne einen Befehl auf dem Server selbst ausführen, der die Entwicklungsumgebung aktualisiert . Ein anderer Befehl (oder ein Shell-Skript) würde die Live-Site vom Master-Zweig aktualisieren, nachdem die Entwicklung zusammengeführt wurde). Ich habe auch Capistrano gefunden, aber das scheint mir momentan etwas übertrieben zu sein.

Während des Lesens fand ich eine Menge Leute, die vorschlugen, zwei weitere Klone auf der Fernbedienung zu erstellen: eine für die Live-Site und eine für die Entwicklungs-Site, bei Bedarf Zweige einziehen. Dies lässt jedoch auch die Versionskontrolldateien über das Internet zugänglich, was ich nicht möchte. Im Idealfall möchte ich eine "saubere" Kopie ohne Git Dateien oder Ordner.

Ich fand auch einen Ansatz mit Git-Archiv, aber das Ausführen von Git-Archiv von meinem nackten Repository erlaubt mir nur, den Master-Zweig zu archivieren. Ich mache das mit dem Befehl git archive --format=tar HEAD | (cd /var/www/example/htdocs/ && tar xf -) in /opt/git/example.git/.

Ich fühle mich wie der git archive Ansatz bringt mir am nächsten eine Antwort, aber ich bin durch meine Mangel an Git-Wissen begrenzt. Kann ich den Befehl ändern, um eine Verzweigung anstelle von HEAD zu verwenden (wenn ich versucht habe, Ursprung/Master anstelle von HEAD zu verwenden, habe ich einen Fehler erhalten)? Gibt es jemanden, der mich in die richtige Richtung weisen kann?

Antwort

4

Sie können jede Struktur-ish (jede Verzweigung, Tag, sha1 Hash usw.) als Argument für Git-Archiv verwenden. Sie können Ursprung/Master nicht verwenden, da Sie sich im leeren Repo befinden und keinen Ursprung haben. Sie müssen die lokalen Zweignamen verwenden, z.

git archive --format=tar develop 
+0

Ich wünschte, ich könnte dies 5 Mal upvote. So einfach ... so einfach. – Bram

+0

Hehehe danke :) – ralphtheninja

+0

Eine letzte Frage, bevor Sie das endlich akzeptieren: Ist es möglich, .gitignore-Dateien zu entfernen? – Bram