2015-03-12 2 views
5

In unserer Firma haben wir wirklich leistungsstarke Linux-basierte Build-Server (Doppel-Xeon mit 40-Core) und nicht so leistungsstarke win7 Laptops. Wir bauen unser Produkt in C/C++ für eine esoterische CPU. Der Compiler existiert nur in Linux. Ich kann mein Git Repo mit Qt Creator bearbeiten. Es funktioniert und ziemlich schnell und alles. Aber ich kann die Quelle nicht auf unserem Laptop aufbauen. Wir haben ein Main-Git-Repo und ich kann das gleiche Repo auf meinen Laptop und auf unseren Build-Server klonen. Ich möchte das erreichen, wenn ich den Build-Button drücke, baut mein Code magisch auf dem Build-Server auf. Ich habe eine Proof-of-Concept-Lösung, wo mein Build-Skript eine git diff auf meinem Repo und scp es auf den Build-Server als ssh, um Server erstellen diese Diff auf dem Server Repo als Start und warten Sie die Kompilierung. Aber diese Lösung ist nicht so narrensicher. Ich denke, es gibt eine bessere Herangehensweise/Methode. Wie kann ich mein Git Repo auf einem externen Server erstellen?Wie kann ich mein lokales Git Repo auf einem externen Server erstellen?

+0

Eine übliche Methode besteht darin, einen Post-Receive-Hook auf einem Server-Repo zu haben, den Sie zu diesem Repo schieben, und es führt einen Checkout durch und steuert den Build. – jthill

+0

Unabhängig davon, wie Sie den Build-Server dazu bringen, Ihre Quellen zu erstellen, wäre es nicht noch netter, ein Feedback zu haben, bevor Sie sich verpflichten? Gibt es vielleicht einen Cross Compiler, der auf Ihrem Laptop läuft? – flup

Antwort

4

Wenn Sie zu einem bare repo auf dem Build-Server schieben können, dann können Sie zu diesem nackten Repo assoziieren ein post-receive hook (.git/hooks/post-receive), das:

  • Kasse den Code

    #!/bin/sh 
    git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f 
    
  • Auslöser die Kompilierung.

Auf diese Weise müssen Sie das Diff nicht selbst behandeln.
Sie müssen nur mit der Build-Schaltfläche die Aktion verknüpfen, um Ihre Verzweigung auf das leere Repo des Build-Servers zu verschieben, und der Post-Receive-Hook erledigt den Rest.

+0

Überprüfen Sie den Code von einem leeren Repo? –

+0

@ Industrie-Antidepressivum, das ist die Idee: das bloße Repo ermöglicht es Ihnen, darauf zu drücken, aber von der bloßen Repo können Sie seinen Inhalt zu einem funktionierenden Baum, wo Sie wollen, und verwenden Sie diesen Arbeitsbaum für den Aufbau. – VonC

+0

Ich werde das versuchen, sieht gut aus für mich. Ich wusste nicht, dass ich ein leeres Repo zu einem Arbeitsverzeichnis auschecken kann. –

2

Sie könnten zu einem forking Workflow wechseln, wo jeder Entwickler in der Firma eine persönliche öffentliche bare Repo hat, die eine Gabelung des offiziellen zentralen Repository ist.

Dann, wenn Sie Ihre Änderungen erstellen möchten, schieben Sie sie (eine Zweigstelle oder der Master von) Ihre eigene persönliche öffentliche Repo.

Der Build-Server klont nicht nur das offizielle zentrale Repository, sondern auch Ihr öffentliches Repo. Wenn Sie also zu Ihrem persönlichen öffentlichen Repository wechseln, fügt der Build-Server die Änderungen zusammen und erstellt einen persönlichen Build für Sie. So wie es wahrscheinlich schon für das offizielle zentrale Repository ist?

Beachten Sie, dass dies nicht zu anders als @VonC Antwort ist, konzentriert sich nur ein wenig mehr auf den Workflow. Das persönliche öffentliche Repo könnte sich auf dem Build-Server befinden, wie @VonC es vorschlägt. Oder es könnte woanders sein. Solange es irgendwo öffentlich genug ist, dass der Build-Server und Sie und Ihre Kollegen es finden können.

+0

Sieht für mich interessant aus, ich werde definitiv mit diesem Ansatz spielen. –

2

Erwägen Sie die Integration von http://jenkins-ci.org/ in Ihren Workflow, um den Build-Prozess zu verwalten, indem Sie einen "git post-receive hook" verwenden, um den Build als (von @VonC vorgeschlagen) auszulösen.

Wenn Sie den "Forking-Workflow" wie von @flup vorgeschlagen verwenden möchten, können Sie einen Blick auf http://gitlab.com werfen, der eine einfache Möglichkeit bietet, Pull/Merge-Anfragen, Fork-Repositories und Hooks zu verwalten.

Verwandte Themen