Sont canoniques de l'emplacement des submodules à distance? Si oui, êtes-vous OK avec le clonage d'une fois? En d'autres termes, voulez-vous le peu de clones juste parce que vous souffrez de la perte de la bande passante de fréquentes sous-module (re)clones?
Si vous voulez peu profonde clones pour enregistrer les locaux de l'espace disque, puis Ryan Graham réponse semble être une bonne façon d'aller. Manuellement clone les dépôts, de sorte qu'ils sont peu profonds. Si vous pensez qu'il serait utile, d'adapter git submodule
à la soutenir. Envoyer un email à la liste de demander à ce sujet (des conseils pour sa mise en œuvre, des suggestions sur l'interface, etc.). À mon avis, les gens y sont très favorables à des contributeurs potentiels que voulez véritablement à améliorer Git de manière constructive.
Si vous êtes OK avec le fait de plein de clone de chaque sous-module (plus tard, extrait de les conserver jusqu'à la date), vous pouvez essayer en utilisant l' --reference
option de git submodule update
(c'est dans Git 1.6.4 et plus tard) pour faire référence à l'objet local magasins (ex. --mirror
des clones de la structure canonique sous-module dépôts, puis utilisez --reference
dans votre submodules à point à ces clones locaux). Juste être sûr de lire à propos de git clone --reference
/git clone --shared
avant d'utiliser --reference
. Le seul problème probable avec le référencement miroirs serait si jamais ils finissent par aller chercher de non-avance rapide des mises à jour (bien que vous pouvez activer reflogs et d'élargir leur expiration de windows pour aider à conserver abandonnés s'engage à ce que pourrait poser un problème). Vous ne devriez pas avoir de problèmes tant que
- vous ne faites pas de local sous-module s'engage, ou
- toutes les commits qui sont laissés ballants par des non-avancer rapidement que les canonique dépôts pourrait publier ne sont pas les ancêtres de votre local sous-module s'engage, ou
- vous êtes diligent au sujet de garder votre local sous-module s'engage relocalisée sur le dessus de ce que les non-avance peut-être publiés dans la structure canonique sous-module de référentiels.
Si vous allez avec quelque chose comme cela et il y a toute chance que vous pourriez réaliser local sous-module s'engage dans votre travail d'arbres, il serait probablement une bonne idée de créer un système automatisé qui permet de s'assurer critique les objets référencés par l'extrait submodules ne sont pas les laisser pendre dans le miroir des référentiels (et si il y en a, des copies pour les dépôts qui en ont besoin).
Et, comme l' git clone
man dit, ne pas utiliser --reference
si vous ne comprenez pas ces conséquences.
# Full clone (mirror), done once.
git clone --mirror $sub1_url $path_to_mirrors/$sub1_name.git
git clone --mirror $sub2_url $path_to_mirrors/$sub2_name.git
# Reference the full clones any time you initialize a submodule
git clone $super_url super
cd super
git submodule update --init --reference $path_to_mirrors/$sub1_name.git $sub1_path_in_super
git submodule update --init --reference $path_to_mirrors/$sub2_name.git $sub2_path_in_super
# To avoid extra packs in each of the superprojects' submodules,
# update the mirror clones before any pull/merge in super-projects.
for p in $path_to_mirrors/*.git; do GIT_DIR="$p" git fetch; done
cd super
git pull # merges in new versions of submodules
git submodule update # update sub refs, checkout new versions,
# but no download since they reference the updated mirrors
Alternativement, au lieu de --reference
, vous pouvez utiliser le miroir des clones en combinaison avec la valeur par défaut hardlinking fonctionnalité de git clone
à l'aide des miroirs, comme la source de votre submodules. Dans les nouveaux super-projet de clones, n' git submodule init
, de modifier le sous-module d'Url en .git/config
pour pointer vers le local des miroirs, puis procédez de l' git submodule update
. Vous devez reclone existants extrait submodules pour obtenir les liens physiques. Vous économisez de la bande passante en téléchargement uniquement une fois dans les rétroviseurs, puis aller chercher localement à partir de celles de votre check-out, submodules. La difficile liaison permettrait d'économiser de l'espace disque (bien que l'extrait aurait tendance à s'accumuler et être dupliquée dans plusieurs instances de l'extrait submodules' objet de magasins; vous pourriez périodiquement reclone l'extrait submodules à partir des miroirs pour retrouver le disque d'économiser de l'espace fourni par hardlinking).