2010-11-23 8 views
50

Wenn Sie git clone mit --recursive, können Sie alle Git-Submodule zu bekommen.Retrospective hinzufügen - rekursiv zu einem Git Repo

Wenn ich vergessen habe, diese magische Flagge beim Klonen hinzuzufügen, wie kann es passieren, wie gehe ich jetzt und bekomme irgendwelche Submodule?

Wie kann ich das rekursive Flag als Standard für zukünftige Klone festlegen?

Antwort

59

Sie können es mit diesem nach einem einfachen Top-Level-Klon:

git submodule update --init --recursive 

Ich würde nicht empfehlen Klon dies standardmäßig auszukommen. Der richtige Weg, dies zu tun, wenn Sie Submodule aggressiv für die Entwicklung verwenden und nicht nur zu OSS-Bibliotheken von Drittanbietern auf Github verlinken, die Sie einmal in einem blauen Mond aktualisieren können, ist git slave oder subtree zu verwenden.

Hoffe, das hilft.

1

IIRC, git submodule init, git submodule update

Leider sehe ich nicht eine Option standardmäßig rekursiv zu ermöglichen, jedoch.

+0

Man konnte immer eine Shell oder git alias erstellen, die eine rekursive Klon durchführt. Es mag jedoch schwieriger sein, dies in zwei Schritten zu tun, aber auf diese Weise können Sie die URLs der Submodul-Repositories in der Konfigurationsdatei nach dem 'init', aber vor dem' update' ändern. Sie müssen dies für einige Repositorys tun, in denen die Submodule mit der URL für das private Repository eingerichtet wurden, und Sie müssen diese in die öffentlichen URLs ändern. – Abizern

7
  1. Von der Wurzel Ihrer Repo:

    $ git submodule update --init --recursive 
    

    sämtliches registriert Submodule wird aktualisiert, so dass sie zu initialisieren, wenn auf den Wert sein muss, wie in der .gitmodules Datei gefunden, und auch in Rekursion komplexe Submodule (solche mit eigenen Submodulen) und initialisieren und aktualisieren sie ebenfalls.

  2. Der einfachste Weg, den ich kenne, rekursiv der Standard git clone mit einem Alias ​​

    $ git config --global alias.clone = 'clone --recursive' 
    

    Soweit Hinzufügen von Optionen beschatten würde immer macht das Klonen, denke ich, dass die idiomatische Methode ist.

+1

Anstatt den 'clone' Befehl abzuschatten, schlage ich vor, einen varianten Befehl hinzuzufügen '$ git config --global alias.cloner = 'clone --recursive'' – Abizern

+7

Sie beide müssen die' = 'Markierung entfernen:' git config - -global alias.clone 'clone --recursive'' – ELLIOTTCABLE

+2

HINWEIS: Diese Antwort ist *** völlig falsch ***. git lässt dich nicht "shadow alias" einen vorhandenen Git-Befehl. Der 'alias.clone' wird komplett ignoriert. – Jez