2009-07-13 6 views
23

In Svn können Sie ein Repository zu einem beliebigen Ordner in einem anderen Svn-Repository verknüpfen. Ich frage mich, ob es eine ähnliche Funktion für Git gibt? Grundsätzlich möchte ich ein Git-Submodul in meinem Repository, aber ich möchte, dass das Submodul ein Zeiger auf einen Unterordner eines anderen Git-Repository ist, nicht das gesamte Repository. Ist das möglich?Git Submodul zu einem Unterordner

Antwort

18

Git unterstützt keine Teilüberprüfungen, daher muss submodule auf ein vollständiges Repository verweisen.

This thread on the Git mail list bietet einige Hintergrundinformationen.

This article from Panther Software bietet einige Einblicke von jemand anderen versucht, ein ähnliches Ziel zu erreichen (d. H. Replizieren svn:externals mit Git).

Wenn beide Projekte unter Ihrer Kontrolle sind, schlage ich vor, dass Sie den "Unterordner", der Sie interessiert, in seinem eigenen eigenständigen Repo isolieren. Dann können beide Projekte Submodule erstellen, die darauf verlinken.

+0

Ja, es klingt wie der Unterordner sein eigenes Modul sein sollte, wenn es zwischen zwei Projekten gemeinsam genutzt werden soll. –

+1

Link starb bei Panther Software http://panthersoftware.com/articles/view/3/svn-s-svn-externals-to-git-s-submodule-for-rails-plugins –

3

Normalerweise, wenn Sie versuchen, einen Unterordner von einem anderen Projekt zu extrahieren, sollte dieser Unterordner an erster Stelle ein separates Projekt sein, und beide Elternprojekte sollten sich darauf beziehen.

Sie können den Verlauf eines solchen Unterprojekts mit einem Tool wie git subtree extrahieren. Dann können Sie den Teilbaum zurück in Ihr Projekt verbinden, indem Sie entweder git submodule oder git subtree verwenden, je nachdem, was Sie bevorzugen.

+9

Nicht immer. Zum Beispiel möchte ich Twitter Bootstrap in mein Projekt ziehen, um die .less-Dateien zu verwenden. Ich brauche nicht alle Beispiele und Parser usw. nur die .less Dateien aus dem/lib/Ordner. Momentan kann ich das nicht mit einem Submodul selbst erreichen – Hades

+0

Sie können nur ein bestimmtes Unterverzeichnis mit 'git subtree' in ein Verzeichnis in Ihrem Repo abbilden. – technomage

13

Ich laufe auf das gleiche Problem. Es sieht von einem Git-Level aus nicht lösbar aus, zumindest nicht in einer Weise, die es Ihnen leicht macht, zum Eltern-Repo zu ziehen oder zu drücken.

Allerdings können Sie diese Einschränkung umgehen, indem Sie eine einfache Symlink mit:

  1. Ihre Submodul in einem separaten Verzeichnis einrichten.
    • git submodule add http://example.com/repo.git ./submodules/repo
  2. Erstellen Sie einen symbolischen Link in den Unterordner an dem Ort, den Sie wünschen:
    • ln -s ./submodules/repo/subdirectory ./wherever/symlinked_directory

Referenzen:

+0

Ich mag diese Lösung. Wie funktioniert es für dich? – sfkaos

+1

Arbeite seit ungefähr 2 Jahren für mich :) –