2010-02-23 11 views
28

Es scheint ein git Repo innerhalb eines übergeordneten Repo nicht enthalten ist in einem auf der übergeordneten begehen, wenn es Setup als Submodul ist. Ist es möglich, dieses Verhalten zu überschreiben und den verschachtelten Git-Repo wie jedes andere Verzeichnis zu behandeln? Ich möchte mich nicht auf externe Abhängigkeiten durch Submodule verlassen, sondern möchte mit git diese Abhängigkeiten innerhalb des Projekts verwalten.Verschachtelte Git-Repositories ohne Submodule?

+0

Ich bin nicht sicher, ob dies der richtige Weg ist „Räude Abhängigkeiten“, aber ich schlage zwei Möglichkeiten, zu erreichen, was Sie wollen, sowie einige Präzisierungen über die Natur der Submodule in Git . – VonC

+1

Es klingt wie das, was Sie wirklich wollen, ist eine Teilbaumzusammenführung. Das wird Sie mit einem einzigen Repository und einer einzigen Geschichte verlassen. –

+0

Sind Sie sicher, dass ** ein Git-Repo innerhalb eines Parent-Repos nicht in einem Commit für den Parent enthalten ist, es sei denn, es ist als Submodul ** eingerichtet? Weil das ist, was ich will, und wenn du recht hast, dann hat Git das Out-of-the-Box. –

Antwort

7

1/Sie könnten, dass außer Kraft setzen durch:

  • entweder eine git config Einstellung: die Umgebungsvariable $GIT_DIR
    Sie definieren Ihr .git Verzeichnis des verschachtelten Git arbeiten Baum als externen.git (extern sowohl die nested repo und die Haupt repo)
  • oder durch verschachtelte repo 'N' außerhalb des Haupt repo Einstellung, aber die Kasse, die 'N' repo innen die Haupt Repo:
core.worktree

den Pfad zur Wurzel des Arbeits Baumes ein. Dies kann durch die GIT_WORK_TREE Umgebungsvariable und die --work-tree Befehlszeilenoption

In beiden Fällen außer Kraft gesetzt wird, ist die Idee, eine verschachtelte worktree ohne .git Unterverzeichnis in ihm zu haben.

2/Bei Submodulen ist das verschachtelte Git Repo nicht wirklich im übergeordneten Repo enthalten.
special entry A wird in der Stammbaum aus der externen Git SHA1 aufzuzeichnen.

new file mode 160000 
index 0000000..4c4c5a2 

Siehe auch "nature of Git submodules" (dritter Teil der Antwort)

+0

Ihre Methoden 1a und 1b sind perfekt für mich, danke. Ich bin mir sicher, dass dies nicht der empfohlene Ansatz ist, aber ich brauche diese Flexibilität wirklich. Danke für die umfassende Antwort! – stevo

+3

Also keine Option git behandelt verschachtelte .git Verzeichnisse als einfache Verzeichnisse behandeln? –

+1

@Mr_and_Mrs_D nicht, dass ich von – VonC

2

Siehe auch Are git submodules the only safe way to have working copies within working copies?.

Als ich auf die aktuelle Diskussion stieß, ging es mir um ein anderes Problem als das hier gelöste: git als eine Art Archivierungswerkzeug zu verwenden, das einen Dateisystembaum archivieren könnte, der bereits einige git Arbeitsverzeichnisse hat. Vielleicht ist die andere Frage näher an meinem Problem.

+0

kenne Hier ist ein Tool für mein Problem: http://webcache.googleusercontent.com/search?q=cache:Ffr9y2l0jh4J:eigenclass.org/hiki/gibak-backup-system-introduction+ verschachtelt + git & cd = 2 & hl = de & ct = clnk & gl = ru. Es gibt wahrscheinlich andere ähnliche Werkzeuge. –

+1

oops - defekter Link im Kommentar (den Sie wahrscheinlich löschen und zu Ihrer Antwort hinzufügen sollten) –

0

Dies ist nicht die eleganteste Lösung, aber es ist erwähnenswert.

Wenn Sie den Ordner, der das Repository enthält, zippen, können Sie das im externen Repository überprüfen.

Dies kann hilfreich sein, da Sie den vollständigen Status einschließlich git reflog haben.

+0

Sieht so aus als wäre dies die einzige echte Option, zu schlecht fügt es zusätzliche (manuelle) Schritte hinzu ... – nus

4

fand ich eine andere Methode, die für mich

Wenn Sie git add somefolder/ < scheint zu funktionieren - stellen Sie sicher, Sie haben die / am Ende, dann wird es alle Dateien hinzufügen, anstatt es wie ein Submodul zur Behandlung.

Mehr wird hier erwähnt: http://debuggable.com/posts/git-fake-submodules:4b563ee4-f3cc-4061-967e-0e48cbdd56cb

+0

Das ist, was ich gesucht habe , aber ich bekomme eine Fehlermeldung, wenn ich versuche, das verschachtelte .git selbst hinzuzufügen: 'Fehler: Ungültiger Pfad 'test/data/fixtures/clean/.git/COMMIT_EDITMSG' Fehler: Test/Daten/Fixtures nicht hinzufügen/clean/.git/COMMIT_EDITMSG zu indexieren fatal: Hinzufügen von Dateien fehlgeschlagen 'Es scheint mit den eigentlichen Dateien obwohl arbeiten, danke, es ist ein Start – nus

+0

Ich habe gesehen, wo Menschen einen verschachtelten' .git' Ordner zu '.checkout_git umbenennen 'https://blog.gopheracademy.com/advent-2015/go-in-a-monorepo/ Und benennen Sie es zurück, als wie benötigt –