Wie richte ich ein Git-Projekt ein, um ein externes Repo-Submodul zu verwenden?

213

Ich möchte ein Repo erstellen, das ein Remote-Repo einbindet.

Nehmen wir zum Beispiel jQuery als Submodul an:

git://github.com/jquery/jquery.git

Was wäre der Prozess, ein Repo mit jQuery als Submodul zu erstellen und mein eigenes externes als Remote-Repo hinzuzufügen?

Auch wenn dies eingerichtet ist und ich auf meine eigene Fernbedienung drücke / ziehe, bleibt die externe dann intakt?

Tom
quelle
1
Wenn Sie "Pull-In" sagen, möchten Sie, dass das jQuery-Repo ein Submodul Ihres eigenen Repos ist?
Ezod
Ja genau, sorry wenn das nicht klar ist. Ich würde gerne wissen, wie ich dies als extern einrichte, während ich Änderungen an meiner eigenen Fernbedienung
Tom
Siehe das Git Submodule Tutorial im Git-Wiki.
Greg Bacon

Antworten:

343
  1. Sie haben ein Projekt - nennen Sie es MyWebApp , das bereits ein Github-Repo hat
  2. Sie möchten das jquery-Repository in Ihrem Projekt verwenden
  3. Sie möchten das jquery-Repo als Submodul in Ihr Projekt ziehen .

Submodule sind wirklich sehr, sehr einfach zu referenzieren und zu verwenden. Angenommen, Sie haben MyWebApp bereits als Repo eingerichtet, geben Sie vom Terminal aus die folgenden Befehle aus:

cd MyWebApp
git submodule add git://github.com/jquery/jquery.git externals/jquery

Dadurch wird ein Verzeichnis mit dem Namen externals/jquery* erstellt und mit dem github jquery-Repository verknüpft. Jetzt müssen wir nur noch das Submodul starten und den Code darauf klonen:

git submodule update --init --recursive

Sie sollten jetzt den neuesten Code in das Submodul klonen lassen. Wenn sich das jquery-Repo ändert und Sie den neuesten Code abrufen möchten, geben Sie den submodule updateBefehl einfach erneut aus. Bitte beachten Sie: Ich habe normalerweise eine Reihe von externen Repositorys in meinen Projekten, daher gruppiere ich die Repos immer in einem "externen" Verzeichnis.

Das Online- Pro-Git-Buch enthält einige gute Informationen zu Submodulen (und Git im Allgemeinen), die auf einfach zu lesende Weise präsentiert werden. Alternativ gibt git help submodulees auch gute Informationen. Oder schauen Sie sich das Git Submodule Tutorial im Git-Wiki an.

Ich habe diesen Blogeintrag bemerkt, der über Submodule spricht und sie mit dem svn: externals-Mechanismus von Subversion vergleicht: http://speirs.org/blog/2009/5/11/understanding-git-submodules.html

* Als bewährte Methode sollten Sie Ihre Submodule immer in einem eigenen Verzeichnis ablegen, z. B. Extern. Wenn Sie dies nicht tun, kann Ihr Stammprojektverzeichnis sehr schnell sehr unübersichtlich werden.

memmons
quelle
4
Tolle Erklärung! :) Auch "Git Help Submodules" hilft, wenn Sie ein bisschen mehr Details, Interna usw. wollen
WhyNotHugo
2
Danke, genau das, was ich brauchte.
MikeSchinkel
1
@Chevi Es hängt von Ihren Anforderungen ab. Im Allgemeinen ist das Hinzufügen eines Git-Projekts als Submodul zu Ihrem Projekt eine gute Lösung für Projekte, die sich häufig ändern oder sich noch in der Entwicklung befinden. Auf diese Weise können Sie auf einfache Weise sicherstellen, dass der gesamte Code von Drittanbietern in Ihrem Projekt auf dem neuesten Stand ist. Für Code von Drittanbietern, der im Wesentlichen statisch ist - stabiler, ausgereifter Code, der sich von Version zu Version wahrscheinlich nicht wesentlich ändert - bietet die Verwendung eines Submoduls nicht viel Wert.
Memmons
2
Entschuldigung, aber im Vergleich zu svn externals ist es nicht so einfach
Keil
2
@Keil Es sind zwei Befehle git submodule addund git submodule update... ich bin mir nicht sicher, wie viel einfacher es werden könnte.
Memmons
24

Das meiste, was Sie wissen müssen, wurde bereits beantwortet, daher werde ich mich nicht darum kümmern. Ich habe jedoch eine kleine Information gefunden, die normalerweise fehlt.

Wie Sie wissen, aktualisiert "git pull" die Submodule nicht und "git submodules update" lädt auch nicht den neuesten HEAD dieser Submodule herunter.

Sie können verwenden, um alle Ihre Submodule auf die neueste Upstream-Version zu aktualisieren

git submodule foreach git pull

Wenn Sie häufig Ihre Submodule ändern und viele davon haben, wird "git foreach" von unschätzbarem Wert.

WhyNotHugo
quelle
0

Ich denke, dass die @ Hugo-Antwort genau das sein könnte, was Sie brauchen, und gut funktioniert. Also habe ich einen einfacheren Weg gefunden.

git submodule update --remote

Das ist alles.

Ein vollständiger Workflow könnte also sein:

git clone project-with-submodules
git submodule init
git config -l
git submodule update --remote
Dapaldo
quelle