web-dev-qa-db-fra.com

Comment changer un sous-module git pour pointer vers un sous-dossier?

Parcourez le tutoriel du sous-module , j'ai créé un sous-module à partir du projet boto . Ensuite, j'ai découvert que je n'avais en fait besoin que d'un sous-ensemble de ce projet - en particulier, le dossier boto .

Je voudrais changer mon sous-module pour pointer vers ce dossier. Quand je regarde dans .gitmodules, je vois

[submodule "backup/src/boto"]
    path = backup/src/boto
    url = https://github.com/boto/boto.git

Quelle URL dois-je utiliser au lieu de https://github.com/boto/boto.git ? Après avoir modifié l'URL, dois-je supprimer le dossier boto localement et ré-extraire?

87
ripper234

Je crains que l'URL des sous-modules pointe toujours juste vers le référentiel - vous ne pouvez pas spécifier que vous ne voulez qu'un sous-dossier d'un référentiel, de la même manière que git ne prend pas en charge les "clones étroits" en général.

Si vous ne pouvez pas vivre avec le référentiel entier comme sous-module, vous pouvez toujours créer un nouveau référentiel qui est cloné à partir de boto, puis configurer un travail cron pour:

  1. git fetch ce référentiel dans un répertoire
  2. Utilisation git filter-branch pour mettre à jour une branche où le sous-répertoire est au niveau supérieur.
  3. Ajoutez cette branche du référentiel en tant que sous-module. Cependant, c'est un peu compliqué et ma préférence serait simplement de vivre avec le dépôt entier comme sous-module.
57
Mark Longair

Vous ne pouvez pas cloner uniquement une partie d'un référentiel. C'est parce que git traite le référentiel comme un objet entier: quand vous l'obtenez, vous l'obtenez tous.

Ainsi, la solution ici serait de récupérer le sous-module dans un autre répertoire, puis d'utiliser un lien symbolique pour atteindre votre objectif.

22
Artefact2

Ce que vous voulez faire, c'est créer une branche dans le sous-module et déplacer le dossier vers le haut et supprimer ce dont vous n'avez pas besoin. Vous pouvez ensuite gérer cette branche à la place. Si vous souhaitez pousser vos modifications, vous devriez d'abord pouvoir sauvegarder la fusion. Git saura que vous avez déplacé les fichiers et que la fusion a réussi.

J'espère que cela t'aides.

13
Adam Dymitruk