Dépôt Git dans un autre dépôt git

J'ai la structure de répertoires suivante:

  • g1/
    • .git
    • un
    • b
    • c /
      • .git
      • d
      • e

Comme vous pouvez le voir, j'ai de repository " c "dans le repository "g1". Lorsque j'utilise la commande suivante:

git clone g1 g2

Je n'obtiens que la structure de répertoires suivante:

  • g1/
    • .git
    • un
    • b
    • c/

Le répertoire "c" reste vide. Des idées?

29
demandé sur Jungle Hunter 2010-08-11 13:08:54

2 réponses

Sous-modules (discuté dans le Livre Pro Git ), aide à gérer les référentiels imbriqués dans un référentiel principal:

Les sous-modules autorisent les dépôts étrangers pour être incorporé à l'intérieur d'un dédié sous-répertoire de l'arborescence des sources, toujours pointé sur un commit particulier.

Ils ne doivent pas être confondus avec télécommandes, qui sont destinés principalement pour branches du même projet; les sous-modules sont destinés à différents projets que vous souhaitez faire partie de votre arbre source, tandis que l'historique des deux projets reste encore complètement indépendant et vous ne pouvez pas modifier le contenu du sous module à partir de dans le projet principal.

Les sous-modules conservent leur propre identité; le support de sous-module juste stocke le référentiel de sous-modules emplacement et ID de validation, donc autre les développeurs qui clonent le superprojet peut facilement cloner tous les sous-modules à la même révision.

36
répondu Jungle Hunter 2013-01-19 18:05:20

Git 2.5 + (Q2 2015) sera un peu plus précis dans la façon dont il présente le sous-module.
Depuis un sous-module est enregistré en tant que gitlink (une entrée spéciale dans l'index), ce qui explique pourquoi 'c' est vide lorsque le parent repo est cloné.
Voir aussi "git submodule vérifie la même commettre".
Vous avez besoin d'un git submodule update --init pour remplir 'c'.

C'est maintenant plus clairement documenté.

Voir commettre ec48a76 (27 Mai 2015) par Stefan Beller (stefanbeller).
(Fusionné par Junio C Hamano -- gitster -- dans commettre 7df5c97, 11 Juin 2015)

submodule doc: réorganiser les paragraphes introductifs

Il est préférable de commencer la page de manuel avec une description de quoi les sous-modules le sont réellement, au lieu de dire ce qu'ils ne sont pas.

Le git submodule la page de manuel maintenant (juin 2015) commence par:

Un sous-module vous permet de conserver un autre dépôt Git dans un sous-répertoire de votre référentiel.
L'autre référentiel a son propre historique, qui n'interfère pas avec l'historique du référentiel actuel.
Cela peut être utilisé pour avoir des dépendances externes telles que des bibliothèques tierces par exemple.

Cependant lors du clonage ou de l'extraction d'un référentiel contenant des sous modules, ceux-ci ne seront pas extraits par défaut; les 'init ' et ' update' les sous commandes conserveront les sous modules extraits et à une révision appropriée dans votre arbre de travail.

2
répondu VonC 2017-05-23 12:07:08