Cloner le dépôt principal avec succès ne teste pas ses sous-modules. Un sous-module est un autre dépôt Git, éventuellement sur un autre hôte et avec un autre transport.

Commencez par lire les URL déclarées :

git -C project config --file .gitmodules --get-regexp '^submodule\..*\.url$'
git -C project submodule status --recursive

Un dépôt parent récupéré en HTTPS peut contenir un sous-module utilisant git@host:. Un réglage de proxy HTTP ne configure pas cette connexion SSH. Les URL relatives des sous-modules doivent aussi être résolues par rapport au remote approprié du superprojet, pas à une adresse web déduite de son nom.

Les réglages locaux ont une portée limitée

Une entrée locale http.proxy appartient au dépôt dont le fichier de configuration la contient. Ne supposez pas que l’examen du parent suffit à connaître tous les réglages effectifs d’un dépôt enfant initialisé.

Pour imposer temporairement un proxy HTTPS lors d’une mise à jour récursive, vous pouvez fournir une configuration Git en ligne de commande à cet appel :

git -C project -c http.proxy=http://203.0.113.10:8080 \
  submodule update --init --recursive

Remplacez le point de connexion d’exemple. Pour des sous-modules HTTPS publics sur une route autorisant les proxys publics, la liste de proxys HTTP fournit des adresses candidates. Cela ne convertit pas les URL SSH en HTTPS. Si la route choisie est inattendue, examinez aussi les configurations plus spécifiques fondées sur l’URL.

Quand l’URL enregistrée a changé

Git enregistre localement la configuration du sous-module pendant l’initialisation. Si l’URL du sous-module a changé dans le projet, comparez la déclaration actuelle à la valeur enregistrée localement avant de conclure que le proxy est hors service. L’opération sync documentée actualise les URL enregistrées à partir de la déclaration du projet ; ce n’est pas en soi un réglage de proxy réseau.

En cas d’échec imbriqué, notez le chemin exact du sous-module et le remote cités dans l’erreur. Une opération récursive peut contacter plusieurs hôtes ; un hôte interne peut nécessiter une exception d’accès direct alors qu’un hôte public utilise le proxy.

Distinguez les erreurs de transport des erreurs du dépôt. Un commit indisponible, un accès refusé par le dépôt et un échec de connexion au proxy sont des causes différentes du même résultat général « submodule update failed ».

Articles similaires