854 votes

Changement de référentiel distant pour un sous-module git

J'ai créé un dépôt git avec un sous-module. Je suis en mesure de dire le sous-module lui-même pour modifier sa distance du chemin du référentiel, mais je ne suis pas sûr de la façon de dire le dépôt parent comment faire pour modifier la distance du chemin du référentiel pour le sous-module.

Je ne serais pas surpris si je suis un peu de chance et de faire les choses manuellement, que même la suppression des submodules n'est pas facile.

Edit: j'ai terminé de se débarrasser de submodules et juste eu une copie de travail au sein d'une autre copie de travail, donc je pose la question par curiosité maintenant.

Les instructions données ci-dessous semblent fonctionner dans certaines circonstances, mais apparemment pas dans d'autres.

1160voto

Jim Puls Points 29289

Vous devez simplement être en mesure de modifier l' .gitmodules le fichier de mise à jour de l'URL et puis exécutez git submodule sync afin de refléter cette modification de la superproject et votre copie de travail.

177voto

VonC Points 414372

En fait, un patch a été présenté en avril 2009 afin de clarifier gitmodule rôle.

Alors maintenant, la gitmodule documentation ne comprennent pas encore:

L' .gitmodules fichier situé dans le répertoire de niveau supérieur d'un git arbre de travail, est un fichier texte avec une syntaxe correspondant aux exigences de linkgit:git-config1.
[NEW]:
Comme ce fichier est géré par Git, il suit les +dossiers d'un projet submodules.
Les informations stockées dans ce fichier est utilisé comme un indice pour premier la version authentique de l'enregistrement stocké dans le fichier de configuration du projet.
Spécifique à l'utilisateur d'enregistrer les modifications (par exemple, pour tenir compte des différences dans les sous-module d'Url en raison de la mise en réseau des situations) doit être faite dans le fichier de configuration, tandis que d'enregistrer des modifications à la propagation (par exemple +en raison d'un déménagement de la sous-module source) doit être apportées à ce fichier.

C'est à peu près confirmer la réponse de Jim.


Si vous suivez cette git sous-module tutoriel, vous voyez vous avez besoin d'un "git submodule init" pour ajouter le sous-module référentiel Url .git/config.

"git submodule sync" a été ajouté en août 2008 , précisément pour rendre la tâche plus facile lorsque les changements de l'URL (surtout si le nombre de submodules est important).
L'associé script avec la 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 demeure: git config remote."$remote".url "$url"

80voto

Ben Hymers Points 3912

Ce qui a fonctionné pour moi (sous Windows, à l'aide de git version 1.8.3.msysgit.0):

  • La mise à jour .gitmodules avec le chemin d'accès au nouveau référentiel
  • Supprimer la ligne correspondante de la ".git/config" fichier
  • Supprimer le répertoire correspondant dans l' ".git/modules externes/" répertoire
  • Supprimer les extraits sous-module répertoire lui-même (pas sûr si cela est nécessaire)
  • Exécutez git submodule init et git submodule update
  • Assurez-vous que l'extrait sous-module est à la bonne commettre, et s'engager à ce que, car il est probable que le hachage sera différent

Après avoir fait tout ça, tout est dans l'état que je l'attend. J'imagine que d'autres utilisateurs du référentiel auront la même douleur quand ils viennent de mettre à jour bien qu'il serait judicieux d'expliquer ces étapes dans votre message de commit!

13voto

felipec Points 3278

Il suffit de modifier votre .git/config fichier. Par exemple, si vous avez un "commun" sous-module, vous pouvez le faire dans le super-module:

git config submodule.common.url /data/my_local_common

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X