Zweige haben keine Ordner/Verzeichnisse. Branches sind, ganz einfach, Zeiger auf Hash-IDs zu beglaubigen (sie beginnen als kleine Dateien mit der rohen Hash-ID, obwohl sie in eine Art Datenbank von Name-zu-ID-Mapping komprimiert werden können, was Git tut, um Zeit zu sparen und Platz für Namen, die sich nicht ständig ändern). Es ist also nicht direkt möglich.
Es ist möglich zu tun, was Sie wollen mit Submodulen, obwohl. Es ist nur knifflig. Du musst sehr vorsichtig sein. Es ist mir auch überhaupt nicht klar, ob es überhaupt mit dieser Sache von GitHub Pages funktionieren wird, da sie eine Clone-and-Checkout-mit-Submodul-Operation durchführen müssen.
A Git Submodul ist wirklich nur ein weiteres Git-Repository: Sie Git sagen, dass einige Verzeichnis ("Ordner") wie B
sollte, von einer bestimmten URL durch Klonen eines verschiedenen Git-Repository durchgeführt werden. Sobald der Klon fertig ist, sollte Git dann cd
in das Verzeichnis, das die git clone
macht, und git checkout
ein bestimmtes Commit, durch Hash-ID.
Nun, was ist, wenn Sie für das "andere" Git-Repository, das Sie wollen git://host.name/path/to/url.git
in Unterverzeichnis B
auschecken, geben Sie die URL git://host.name/path/to/url.git
?
Die offensichtliche Gefahr hier ist das Potenzial für endlose Rekursion: Git url.git
auscheckt, sieht, dass es ein Submodul hat, Klone url.git
B
Unterverzeichnis innerhalb B
der Commit auscheckt sieht, dass es ein Submodul hat, Klone es, cd
s zu dem, was jetzt ist B/B
, sieht, dass es ein Submodul hat, Klone es geht in B/B/B
sieht, dass es ein Submodul hat ...
Sie diese endlose Rekursion vermeiden durch:
- Klonen ohne Re kursive Submodul-Extraktion (dies ist die Standardeinstellung für
git clone
) und/oder
- , die sehr sicher machen, dass das spezifische Commit für das Submodul niemals ein Commit enthält, das das Submodul als Submodul hat.
Es gibt noch ein weiteres Problem: Submodule Besuche einer bestimmten commit von Hash-ID, nicht durch Zweignamen. Sie wollten B
, um ein Selbst-Klon zu sein, der Zweig master
auscheckt (der vermutlich nie ein Selbstmodul B
hat).Aber alles, was Sie können erhalten ist ein B
, die eine bestimmte Git-Hash-ID auscheckt, die die Hash-ID ist, die Sie im Commit im Superprojekt gespeichert haben (das ist natürlich das gleiche Repository).
Es gibt einige Möglichkeiten, das Submodul von seinem Ein-spezifischen-Commit zu trennen, einschließlich der Möglichkeiten, einen Zweig nach Branch-Name auszuchecken. Dazu müssen spezifische git submodule
Befehle ausgeführt werden, was dazu führt, dass Sie dies auf GitHub Pages (was immer das auch ist) verhindern können. Aber, vorausgesetzt, sie lassen Sie die Submodul-Sache überhaupt tun, müssen Sie es nicht unbedingt durch Name gehen: Sie können nur eine neue Festschreibung machen, die den neuen master
Hash in das Superprojekt speichert.
Sagen Sie zum Beispiel, Sie sind auf Zweig develop
in diesem Superprojekt-mit-Selbst-als-Submodul. In develop
gibt es eine .gitmodules
Datei, die besagt: "Ich habe ein Submodul/Unterprojekt, das Sie in B
klonen sollten, indem Sie diese URL hier verwenden" (die URL des Superprojekts). Unter der Tipp-Commit von entwickeln Sie haben ein Commit mit einem "gitlink" Baum Eintrag, der sagt "machen einen Klon in B
, Nachschlagen der Teilprojekt URL in .gitmodules
, und mit Hash deadb0a
" -welche ist der Hash der Tipp commit der Filiale master
.
Sobald Sie die Spitze master
zu einem neuen begehen ac0ffee
vorrücken, überprüfen Sie develop
und machen eine neue verpflichten, dass eine „gitlink“ Baum-Eintrag hat, der sagt „einen Klon in B
machen Hash mit ac0ffee
“ . Nichts anderes changes-nur der Hash-ID, aber jetzt, wenn jemand checkt develop
mit Submodule aktiviert ist, erhalten sie das gleiche in B
begehen, dass sie würden, indem Sie aus Zweigmaster
in B
, weil Zweig master
sagt „check out Hash ac0ffee
".
(Offensichtlich ist diese ganze Sache ist ein bisschen fehleranfällig, als Submodule im Allgemeinen ist. Ich vermute, das nach unten zu gehen, nicht ein sehr weiser Weg ist. Aber in der Theorie zumindest, kann es funktionieren.)
Interessante Tatsache: Submodule können nun Zweige verfolgen. –
@DuncanXSimpson: Daher * Es gibt einige Möglichkeiten, das Submodul von seinem ein-spezifischen Commit zu entfernen, einschließlich Möglichkeiten, es einen Zweig nach Zweig-Name auschecken zu lassen. Dazu müssen bestimmte Git-Submodul-Befehle ausgeführt werden ... * Sie müssen den Namen der Verzweigung festlegen (die Sie in der Datei '.gitmodules' speichern können) und dann' git submodule update --remote' oder 'git ausführen Submodul Checkout - Fernwartung ". – torek