2014-09-05 2 views
9

Ich habe eine PHP Cartridge, die normal funktioniert, außer dass ich keinen einfachen Weg finden kann, um OpenShift (rekursiv) die Dateien für meine git Submodule zu pushen, wenn/nachdem es meine Core Repo Dateien pusht.Wie kann ich die Submodule meiner git repos bei Push automatisch bereitstellen?

Dies scheint, als sollte es ein super unkomplizierter und gemeinsamer Anwendungsfall sein. Übersehe ich etwas?

Ich könnte wahrscheinlich ssh in meinen Server und ziehen Sie sie manuell, aber ich möchte dies vollständig automatisieren, so dass, wenn ich die Referenz des Submoduls in meinem Repository aktualisieren diese Änderungen werden, wenn ich bereitstellen.

Antwort

7

Ok, ich werde für 50 zusätzliche Punkte an diesem einen Stich nehmen;)

Hier sind die Schritte, die ich befolgte:

1.) Erstellen Sie PHP-5.3-Anwendung auf OpenShift auf Klon auf lokalen Computer.
2.) Erstellen Sie ein öffentliches Git-Repository auf GitHub, das als Submodul verwendet werden soll.
3.) Fügen Sie der OpenShift-Anwendung das github-Repository mithilfe der folgenden Befehle hinzu, stellen Sie sicher, dass Sie anstelle der git @ url die https-URL verwenden, oder wenn OpenShift Online versucht, das Submodul auszuchecken .

cd into your locally cloned openshift application directory 
git submodule add https://github.com/developercorey/somesubmodule.git ./directory_name 
git add . 
git commit -am "adding a submodule" 
git push 

Wenn Sie keine Fehler in Ihrem Git-Push sehen, dann sollte alles korrekt funktioniert haben. wenn Sie sehen, einen Fehler wie dieser

remote: Host key verification failed. 
remote: fatal: Could not read from remote repository. 
remote: 
remote: Please make sure you have the correct access rights 
remote: and the repository exists. 

Das bedeutet, dass Sie die git @ url statt die HTTPS-URL verwendet, um Ihre git Submodul hinzufügen, oder Sie versuchen, ein eigenes Repository zugreifen. Jetzt können Sie mit dem Befehl rhc ssh und cd in Ihr ~/app-root/runtime/repo-Verzeichnis ssh in Ihre Anwendung gehen und dort sollten Sie Ihr Submodul-Verzeichnis mit den Dateien aus diesem Repository sehen.

Wenn das für Sie nicht funktioniert, lassen Sie mich bitte wissen, was die Ausgabe Ihres Git-Push ist und wir werden von dort gehen.

+0

Sieht aus wie die Submodul-URLs in '.gitmodules' zu 'https: // ...' von 'git @ ...' zu ändern. Vielen Dank! –

6

Für ein Parent-Repo (das Submodule enthält), sollten Sie nur das Parent-Repo selbst drücken: es enthält die gitlink (special entries in the index) Referenzierung der rechten SHA1 für jedes Submodul.

Einmal gedrückt, ein Post erhalten Haken ein auslösen können:

git submodule update --init --recursive 

dass jedes Modul in die richtige SHA1 aktualisieren würde.

Die Post erhalten ist Haken in der Mutter bare repo: /path/to/parent.git/hooks/post-receive mit:

#! /bin/bash 
cd /path/to/non-bare/parent 
git --git-dir=/path/to/parent.git checkout 
git --git-dir=/path/to/parent.git submodule update --init --recursive 
+0

Können Sie hinzufügen, wie dies genau zu Ihrer Antwort zu tun? (Fügen Sie den Post-Empfang Haken, das ist) –

+0

@MurraySmith Ich habe die Antwort aktualisiert. – VonC

+0

Tut mir leid, ich bin immer noch verwirrt darüber, wie ich das auf meine OpenShift-Repos anwenden könnte; Ich fürchte, ich bin neu im Konzept der blanken Repos und weiß nicht genau, welche Dateien wo und wie bearbeitet werden sollen. Haben Sie diesen Fix speziell mit der Einrichtung von OpenShift durchgeführt oder ist dieser Rat allgemein gültig? –