J'ai créé un référentiel git avec un sous-module. Je peux dire au sous-module lui-même de changer son chemin d'accès au référentiel distant, mais je ne sais pas comment dire au référentiel parent comment changer le chemin d'accès au référentiel distant pour le sous-module.
Je ne serais pas surpris si je n'ai pas un peu de chance et que je dois faire les choses manuellement, car même supprimer des sous-modules n'est pas facile.
Vous devriez simplement pouvoir éditer le fichier .gitmodules
pour mettre à jour l'URL, puis exécuter git submodule sync
pour refléter cette modification apportée au superprojet et à votre copie de travail.
Ces commandes effectueront le travail sur la commande Invite sans modifier aucun fichier 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: Modification de l'URL des sous-modules GIT/Branch en une autre URL/branche du même référentiel
En termes simples, il vous suffit d’éditer le fichier .gitmodules, puis de resynchroniser et de mettre à jour:
Editez le fichier, 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
Ce qui a fonctionné pour moi (sous Windows, avec git version 1.8.3.msysgit.0):
git submodule init
et git submodule update
Après tout cela, tout est dans l'état auquel je m'attendais. J'imagine que les autres utilisateurs du référentiel auront les mêmes problèmes quand ils viendront à la mise à jour - il serait sage d'expliquer ces étapes dans votre message de validation!
En fait, un correctif a été soumis en avril 2009 pour clarifier le rôle de gitmodule
.
Alors maintenant, le documentation de gitmodule n'inclut pas encore:
Le fichier _
.gitmodules
_, situé dans le répertoire de niveau supérieur d'un arbre de travail git, est un fichier texte dont la syntaxe correspond aux exigences -of linkgit: git-config 1 .
[NOUVEAU]:
Ce fichier étant géré par Git, il enregistre les + enregistrements des sous-modules d'un projet.
Les informations stockées dans ce fichier sont utilisées comme un indice pour amorcer la version faisant autorité de l'enregistrement stocké dans le fichier de configuration du projet.
Les modifications d’enregistrements spécifiques à l’utilisateur (par exemple pour tenir compte des différences dans les URL de sous-modules dues à des situations de mise en réseau) doivent être apportées au fichier de configuration , tandis que les modifications d’enregistrement sont propagées (par exemple + dû dans un fichier).
Cela confirme à peu près réponse de Jim .
Si vous suivez ceci tutoriel de sous-module git , vous constaterez qu'il vous faut un "_git submodule init
_" pour ajouter les URL du référentiel de sous-modules à .git/config.
"_git submodule sync
_" a ajouté en août 2008 précisément pour faciliter cette tâche lorsque l'URL change (surtout 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
_
L'objectif reste: git config remote."$remote".url "$url"
Il suffit de modifier 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