Comment changer le référentiel distant pour un sous-module git?

J’ai créé un repository git avec un sous-module. Je peux dire au sous-module lui-même de modifier son chemin de référentiel distant, mais je ne sais pas comment dire au référentiel parent comment modifier le chemin du référentiel distant pour le sous-module.

Je ne serais pas surpris si je suis un peu malchanceux et que je dois faire les choses manuellement, car même la suppression de sous-modules n’est pas facile.

Vous devez juste être en mesure de modifier le fichier .gitmodules pour mettre à jour l’URL, puis exécuter la git submodule sync pour refléter cette modification apscope au superprojet et à votre copie de travail.

Ces commandes effectuent le travail sur l’invite de commande sans modifier les fichiers du référentiel local.

 git config --file=.gitmodules submodule.Submod.url https://github.com/username/ABC.git git config --file=.gitmodules submodule.Submod.branch Development git submodule sync git submodule update --init --recursive --remote 

Veuillez regarder le blog pour des captures d’écran: Modifier l’URL / la twig des sous-modules GIT en une autre URL / twig du même référentiel

Qu’est-ce qui a fonctionné pour moi (sous Windows, en utilisant git version 1.8.3.msysgit.0):

  • Mettre à jour les modules .git avec le chemin d’access au nouveau référentiel
  • Supprimer la ligne correspondante du fichier “.git / config”
  • Supprimez le répertoire correspondant dans le répertoire “.git / modules / external”
  • Supprimer le répertoire du sous-module extrait lui-même (ne savez pas si cela est nécessaire)
  • Exécuter git submodule init et git submodule update
  • Assurez-vous que le sous-module extrait est correctement validé et validez-le, car il est probable que le hachage sera différent

Après tout cela, tout est dans l’état auquel je m’attendais. J’imagine que les autres utilisateurs du repository auront la même douleur quand ils viendront à la mise à jour – il serait sage d’expliquer ces étapes dans votre message de validation!

En fait, un patch a été soumis en avril 2009 pour clarifier le rôle de gitmodule .

La documentation gitmodule ne comprend donc pas encore:

Le fichier .gitmodules , situé dans le répertoire racine de l’arborescence de travail git, est un fichier texte avec une syntaxe correspondant aux exigences de linkgit: git-config 1 .
[NOUVEAU]:
Comme ce fichier est géré par Git, il suit les + enregistrements des sous-modules d’un projet.
Les informations stockées dans ce fichier servent d’indice pour amorcer la version faisant autorité de l’enregistrement stocké dans le fichier de configuration du projet.
Les modifications d’enregistrement spécifiques à l’utilisateur (par exemple pour tenir compte des différences d’URL de sous-module dues aux situations de réseau) doivent être apscopes au fichier de configuration, tandis que les modifications d’enregistrements à transmettre (par exemple, + .

Cela confirme à peu près la réponse de Jim .


Si vous suivez ce tutoriel , vous voyez que vous avez besoin d’un ” git submodule init ” pour append les URL du référentiel de sous-modules à .git / config.

git submodule sync ” a été ajouté en août 2008 précisément pour faciliter cette tâche lorsque l’URL change (en particulier si le nombre de sous-modules est important).
Le script associé à cette commande est assez simple:

 module_list "$@" | while read mode sha1 stage path do name=$(module_name "$path") url=$(git config -f .gitmodules --get submodule."$name".url) if test -e "$path"/.git then ( unset GIT_DIR cd "$path" remote=$(get_default_remote) say "Synchronizing submodule url for '$name'" git config remote."$remote".url "$url" ) fi done 

Le but rest: git config remote."$remote".url "$url"

En termes simples, il vous suffit de modifier le fichier .gitmodules, puis de le resynchroniser et de le mettre à jour:

Editez le fichier, soit via une commande git ou directement:

 git config --file=.gitmodules -e 

ou juste:

 vim .gitmodules 

puis resynchronisez et mettez à jour:

 git submodule sync git submodule update --init --recursive --remote 

Modifiez simplement votre fichier .git / config . Par exemple; Si vous avez un sous-module “commun”, vous pouvez le faire dans le super-module:

 git config submodule.common.url /data/my_local_common 

git config --file=.gitmodules -e ouvre l’éditeur par défaut dans lequel vous pouvez mettre à jour le chemin