Question Comment changer le dépôt distant pour un sous-module git?


J'ai créé un dépôt git avec un sous-module. Je peux indiquer au sous-module lui-même de modifier son chemin de dépôt distant, mais je ne suis pas sûr de savoir comment indiquer 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 hors de la chance et que je dois faire les choses manuellement, car même suppression sous-modules n'est pas facile.


531
2018-05-27 02:35


origine


Réponses:


Vous devriez juste pouvoir éditer le .gitmodules fichier pour mettre à jour l'URL, puis exécutez git submodule sync pour refléter ce changement au superprojet et à votre copie de travail.


775
2018-05-27 05:25



Ces commandes feront le travail sur l'invite de commande sans modifier les fichiers sur le 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

S'il vous plaît regardez le blog pour les captures d'écran: Modification des sous-modules GIT URL / Branche vers une autre URL / branche du même référentiel


85
2018-06-05 20:17



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

  • Mettez à jour .gitmodules avec le chemin d'accès au nouveau référentiel
  • Supprimez la ligne correspondante du fichier ".git / config"
  • Supprimez le répertoire correspondant dans le répertoire ".git / modules / external"
  • Supprimer le répertoire de sous-module extrait lui-même (pas sûr si cela est nécessaire)
  • Courir git submodule init et git submodule update
  • Assurez-vous que le sous-module extrait est au bon commit, et validez-le, car il est probable que le hash sera différent

Après avoir fait tout cela, tout est dans l'état que je m'attendrais. J'imagine que d'autres utilisateurs du référentiel auront des difficultés similaires quand ils viendront à mettre à jour - il serait sage d'expliquer ces étapes dans votre message de validation!


59
2017-10-01 21:46



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

Alors maintenant, le documentation gitmodule ne comprend pas encore:

le .gitmodules fichier, situé dans le répertoire de premier niveau d'un arbre de travail git, est un fichier texte avec une syntaxe correspondant aux conditions-de linkgit: git-config1.
  [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.
  Des modifications d'enregistrement spécifiques à l'utilisateur (par exemple pour tenir compte des différences d'URL de sous-module dues à des situations de mise en réseau) doivent être apportées au fichier de configuration, pendant que les modifications d’enregistrement à propager (par exemple + en raison d’un déplacement de la source du sous-module) doivent être apportées à ce fichier.

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


Si vous suivez ceci git sous-module tutoriel, vous voyez que vous avez besoin d'un "git submodule init"pour ajouter les URL du dépôt de sous-module à .git / config.

"git submodule sync" a été 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"


53
2018-05-27 05:40



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, soit directement:

git config --file=.gitmodules -e

ou juste:

vim .gitmodules

puis resynchronisez et mettez à jour:

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

29
2018-05-29 23:27



Il suffit d'éditer votre .git / config fichier. Par exemple; si tu as un "commun" sous-module, vous pouvez le faire dans le super-module:

git config submodule.common.url /data/my_local_common

8
2018-04-01 16:39



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


3