Git-Projektabhängigkeiten von GitHub


14

Ich habe ein PHP-Framework und ein CMS auf das Framework geschrieben. Der CMS ist vom Framework abhängig, das Framework ist jedoch als eigenständiger Ordner in den CMS-Dateien vorhanden. Ich möchte sie auf GitHub als separate Projekte verwalten, möchte aber nicht jedes Mal das CMS-Projekt aktualisieren, wenn ich das Framework aktualisiere. Idealerweise möchte ich, dass das CMS die Framework-Dateien irgendwie abruft, um sie in ein vordefiniertes Unterverzeichnis aufzunehmen, anstatt diese Dateien physisch festzuschreiben.

Ist das mit Git / GitHub möglich? Wenn ja, was muss ich wissen, damit es funktioniert? Denken Sie daran, dass ich eine sehr, sehr grundlegende Erfahrung mit Git habe - ich kann Repositorys erstellen und mithilfe des Git-Plugins für Eclipse ein Commit ausführen, eine Verbindung zu GitHub herstellen und fertig. Momentan arbeite ich alleine an den Projekten, so dass ich bisher nicht viel mehr über Git lernen musste, aber ich würde es gerne in Zukunft für andere öffnen und ich möchte sicherstellen, dass ich es richtig habe.

Was sollte mein idealer Workflow für Projekte mit Abhängigkeiten sein? Alle Tipps zu diesem Thema wäre auch sehr dankbar. Wenn Sie weitere Informationen zu meinem Setup benötigen, fragen Sie einfach in den Kommentaren.


Schauen Sie sich den Git-Teilbaum an, über den hier gesprochen wurde: blogs.atlassian.com/2013/05/…
Nick,

Antworten:


11

Wenn Sie git wirklich für diesen Zweck verwenden möchten, sollten Sie zunächst die Funktionalität des Submoduls in Betracht ziehen :

Dank der Unterstützung von Git-Submodulen kann ein Repository als Unterverzeichnis das Auschecken eines externen Projekts enthalten. Submodule behalten ihre eigene Identität; Der Submodul-Support speichert lediglich den Speicherort des Submodul-Repositorys und die Commit-ID, sodass andere Entwickler, die das enthaltene Projekt klonen ("Superprojekt"), problemlos alle Submodule mit derselben Revision klonen können. Teilweise Auschecken des Superprojekts sind möglich: Sie können Git anweisen, keines, einige oder alle Submodule zu klonen.

Die verlinkte Seite enthält eine detaillierte Diskussion mit Beispielen für die genaue Verwendung.

Trotzdem würde ich empfehlen, Ihr Versionskontrollsystem nicht für das Abhängigkeitsmanagement zu verwenden und stattdessen ein Build-Tool zu verwenden, das diese Aufgaben für Sie erledigt , z. B. Maven oder Ant . Es gibt sogar ein PHP-spezifisches Build-Tool in der Entwicklung, Phing , aber ich habe es selbst noch nicht verwendet. Es wird in einem Artikel erwähnt, der Ihre Frage behandelt: Versionskontrolle! = Abhängigkeitsverwaltung .

Der Grund, warum Build-Tools auf lange Sicht möglicherweise besser passen, liegt darin, dass sie häufig auch unterschiedliche Repository-Typen, externe Bibliotheken (und unterschiedliche Speicherorte) und umfangreiche Überprüfungen unterstützen. Wenn Sie diese beiden Bibliotheken jedoch nur integrieren möchten und keinen zusätzlichen Aufwand verursachen möchten, ist der Ansatz des Submoduls wahrscheinlich ausreichend.


+1 - Danke Deckard. Ich dachte, Git hätte so etwas wie Submodule, ich wusste nur nicht, wie es hieß. Ich werde mir Phing auf jeden Fall genauer ansehen. Ich wollte ein PHP-Build-Tool, das Abhängigkeiten verwaltet, Komponententests ausführt und dann auf meiner Site implementiert. Anscheinend kann Phing das alles. Es sieht auch so aus, als würde es eine Weile dauern, bis man es lernt. Kennen Sie gute Screencasts für Phing (Google ist in dieser Hinsicht nicht freundlich)?
VirtuosiMedia

Die Verknüpfung zu "Submodul-Funktionalität" ist unterbrochen, und die Verknüpfung zu "Versionskontrolle! = Abhängigkeitsverwaltung" ist ebenfalls unterbrochen
Ferrybig

6

Git-Submodule eignen sich hervorragend zum Verwalten von Git-Projektabhängigkeiten.

Wenn Sie einen anderen Ansatz suchen:

Composer kann das alles für Sie tun. Composer ist ein Dependancy Manager für PHP. Die Syntax ist von json. Es ist ziemlich einfach und billig zu bedienen.

Mehr zum Komponisten:

Composer ist ein Tool für das Abhängigkeitsmanagement in PHP. Sie können damit die abhängigen Bibliotheken deklarieren, die Ihr Projekt benötigt, und sie werden für Sie in Ihrem Projekt installiert.

Auf der Dokumentationsseite finden Sie ein Beispiel für die Erstellung Ihrer Datei composer.json:

// Composer.json    
{

    "name": "acme/blog",
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/composer/hello-world"
        }
    ],
    "require": {
        "acme/hello-world": "dev-master"
    }
}

Sobald Sie Ihre composer.json- und composer.lock-Datei für Ihr Projekt erstellt haben, können Sie einfach Ihre Abhängigkeiten installieren:

composer.phar install oder aktualisiere sie: composer.phar update oder erstelle ein bestimmtes Projekt aus packagist : composer.phar create-project acmeproject


1

Vor kurzem habe ich angefangen, ein Tool namens Pundle zu verwenden zum Verwalten der Abhängigkeiten meines Projekts zu verwenden. Es unterstützt eine PHP-Version, PEAR-Pakete, Git-Repositorys und SVN-Repositorys als Abhängigkeiten und ermöglicht deren einfache Angabe über ein "Pundlefile".

Sie sollten Ihre Abhängigkeiten auch so konfigurieren, dass Git / SVN-Checkouts in einem Verzeichnis abgelegt werden, das nicht der Versionskontrolle unterliegt (z. B. "Hersteller"), damit Sie bei jedem Checkout einen Neustart durchführen und das Repository Ihres Projekts schlank bleibt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.