Comment changer le dépôt à distance pour un sous-module git?

j'ai créé un dépôt git avec un sous-module. Je suis capable de dire au sous-module lui-même de changer son chemin de dépôt à distance, mais je ne sais pas comment dire au dépôt parent Comment changer le chemin de dépôt à distance pour le sous-module.

Je ne serais pas surpris si je n'avais pas de chance et que je devais faire les choses manuellement, car même supprimer sous-modules n'est pas facile.

549

7 réponses

vous devriez juste être en mesure d'éditer le fichier .gitmodules pour mettre à jour l'URL et ensuite lancer git submodule sync pour refléter ce changement dans le superproject et votre copie de travail.

798
répondu Jim Puls 2009-05-27 05:25:39

ces commandes feront le travail sur l'invite de commande sans modifier les fichiers sur le dépôt 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

S'il vous plaît regarder le blog pour des captures d'écran: changement de Git submodules URL / branche à une autre URL / branche du même dépôt

91
répondu Pavan Sokke Nagaraj 2015-07-27 14:17:23

ce qui a fonctionné pour moi (sur Windows, en utilisant la version 1.8.3 de git).msysgit.0):

  • mise à Jour .gitmodules avec le chemin vers le nouveau dépôt
  • Supprimer la ligne correspondante de la ".git/config" fichier
  • Supprimer le répertoire correspondant dans l' ".git/modules externes/" répertoire
  • supprimer le sous-répertoire vérifié lui-même (incertain si cela est nécessaire)
  • Run git submodule init et git submodule update
  • assurez-vous que le sous-module Vérifié est à la bonne propagation, et commettez-le, car il est probable que le hachage sera différent

après avoir fait tout cela, tout est dans l'état que j'attendais. J'imagine que les autres utilisateurs du dépôt auront la même douleur quand ils viendront à mettre à jour - il serait sage d'expliquer ces étapes dans votre message de propagation!

60
répondu Ben Hymers 2013-10-01 21:46:14

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

ainsi maintenant la documentation gitmodule ne comprend pas encore:

le fichier .gitmodules , situé dans le répertoire supérieur d'un arbre 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 +dossiers d'un projet submodules.

L'Information stockée dans ce fichier est utilisée comme indice pour amorcer la version officielle du document stockée dans le fichier de configuration du projet.

Les changements d'enregistrements spécifiques à l'utilisateur (par exemple pour tenir compte des différences dans les URLs des sous-modules en raison de situations de réseau) doivent être faits dans le fichier de configuration, pendant l'enregistrement les modifications à propager (par exemple +en raison d'un déplacement de la source du sous-module) doivent être apportées à ce fichier.

assez bien confirmer de Jim réponse .


si vous suivez ce tutoriel git submodule , vous voyez que vous avez besoin d'un" git submodule init " pour ajouter les URLs du dépôt submodule .git / config.

" git submodule sync " a a été ajouté en août 2008 précisément pour rendre cette tâche plus facile 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

le but reste: git config remote."$remote".url "$url"

55
répondu VonC 2017-05-23 12:10:47

en termes simples, vous avez juste besoin d'éditer le .fichier gitmodules, puis resync et mise à jour:

éditer le fichier, soit via une commande git, soit directement:

git config --file=.gitmodules -e

ou juste:

vim .gitmodules

puis resync et mise à jour:

git submodule sync
git submodule update --init --recursive --remote
42
répondu Matthew Wilcoxson 2017-05-12 11:48:59

éditez simplement votre .git/config "151930920 de fichier". 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
8
répondu FelipeC 2009-05-29 23:27:19

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

3
répondu LuGo 2017-04-01 16:39:26