2016-12-20 5 views
1

Ich habe ein Git Repository mit der folgenden Struktur:Git-Zweigs als Submodul zu besitzen Repository

repo - /folder1 
    - /folder2 
    ... 

Diese Repo hat 2 Niederlassungen:

repo ┌--------- master 
    | 
    └--------- branch1 

Ich möchte als Submodul dies hinzuzufügen branch1 Repo, so dass ich die folgende Struktur haben:

repo - /folder1 - /branch1 (submodule) 
    - /folder2 
    ... 

ich weiß, es möglich ist, ein Modul hinzufügen, die einen BH Tracks nch statt nur einem bestimmten begehen, aber wenn ich den Repo als seine eigene Submodul Zugabe Versuch Ich kann das Ergebnis nicht verpflichten, bekomme ich folgende Fehlermeldung:

fatal: git cat-file :0:folder1/branch1: bad file 
Unable to checkout folder1/branch1 

Lauf git-fsck gibt eine große Liste von baumelnden Blobs.

Nach meinem Wissen habe ich niemanden gefunden, der versucht, dies zu tun. Ich habe auch nichts in der Dokumentation gefunden, dass dies nicht möglich ist.

Kann jemand mit mehr Wissen von Git Interna erklären, warum dies nicht möglich ist/funktioniert nicht?

Antwort

1

Submodul kann Ihre Anforderung nicht erfüllen, Sie können stattdessen Unterbaum verwenden.

Wenn Sie ein Submodul hinzufügen, werden die gesamten Zweige des Submodul-Repos vom Hauptrepo verfolgt. So können Sie Branch1 nicht nur nach Submodul verfolgen.

Für Teilstruktur es eine Verzweigung zu einem bestimmten Pfad hinzufügen können:

git subtree add --prefix=folder1/branch1 <repo URL> branch1

+0

Okay, danke. Könnten Sie eine Erklärung hinzufügen, warum das nicht funktioniert? Liegt es an doppelten Objekten im selben Repo? –

+0

Ok, wenn Sie 'git submodule add folder1/branch1' und dann' cd folder1/branch1' verwenden, werden Sie alle Zweige finden, die in Submodul von 'git branch -a' hinzugefügt werden. Und wenn die aktuelle Verzweigung Branch1 für das Hauptrepo ist, nachdem Sie 'cd folder1/branch1' verwendet haben, können Sie' git checkout master' verwenden und 'cd ..' und' cd..' verwenden. Sie werden feststellen, dass Ihr aktueller Repo-Zweig immer noch Branch1 ist. Sie wechseln nur das Repo des Submoduls zum Master-Zweig. –

+0

Aber eigentlich müssen Sie kein Submodul oder Teilbaum für das eigene Repo hinzufügen. Wir verwenden hauptsächlich Submodul und Subtree, um die Repos eines anderen Repos im aktuellen Repo hinzuzufügen. So können Sie die Struktur Ihres Repos auch direkt nach Belieben aufräumen, da alle Dinge nur in einem Repo liegen. –

Verwandte Themen