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.
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.
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
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
etgit 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!
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"
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
é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
git config --file=.gitmodules -e
ouvre l'éditeur par défaut dans lequel vous pouvez mettre à jour le chemin