Submodules et l'accès ssh
J'ai des soucis avec un dépôt git qui contient plusieurs submodules.
Le super dépôt git a été construit avec les commandes
mkdir projectname
cd projectname
git init
git submodule add ssh://myusername@server/pathtorepos
Lorsqu'un utilisateur différent ("otheruser") puis cloner le super référentiel tout semble fonctionner. Mais quand il est temps pour obtenir l'accès à la sous-module
git submodule init
git submodule update
git essaie de cloner le sous-module à l'aide de "myusername" au lieu de "otheruser".
Comment résoudre ce problème?
- Lors de l'ajout du sous-module de supprimer le nom d'utilisateur. Utilisation
git submodule add ssh://server/pathtorepos
Vous devez vous connecter pour publier un commentaire.
Si possible, il est préférable de s'assurer que le
.gitmodules
fichier contient l'URL du référentiel qui peut être cloné par n'importe qui, normalement, soit ungit://
ouhttp://
URL. Les utilisateurs qui ont un accès SSH eux-mêmes peuvent changer dans le sous-module après clonage et changer l'URL dansremote.origin.url
pour pointer vers une URL SSH avec leur nom d'utilisateur, par exemple:L'autre utilisateur doit être en mesure de le faire même dans la situation actuelle. Mise à jour: Chris Brown points ci-après qu'il est également raisonnable d'utiliser une URL SSH dans
.gitmodules
si vous omettez le nom d'utilisateur et tous les utilisateurs du référentiel ont un accès SSH - ils besoin d'ajouter leur nom d'utilisateur de la même manière à la ci-dessus si elle diffère localement et à distance.Notez que les Url dans
.gitmodules
ne sont utilisés que lorsque initialisation le sous-module. L'initialisation de la sous-module définit la valeur de configurationsubmodule.<SUBMODULE-NAME>.url
dans le projet principal pour tout ce qui est engagé dans.gitmodules
- c'est la valeur qui sera utilisée sur le premier sous-module de mise à jour. Entre l'initialisation et la mise à jour de la sous-module, vous pouvez également modifier cette adresse qui sera utilisée pour cette première mise à jour avec une commande comme:En effet, vous pouvez avoir besoin de faire cela si la première mise à jour échoue. Une fois que le sous-module a été mis à jour pour la première fois, l'URL que vous avez besoin de changer, c'est que définis pour
origin
au sein de la sous-module - à ce stade, il est seulement utile pour définir lasubmodule.my-submodule.url
valeur de configuration dans le projet principal si vous êtes susceptible d'être la suppression et re-mise à jour de la sous-module..gitmodules
si ils ne comprennent pas un nom d'utilisateur (chaque utilisateur final peut alors configurer.ssh/config
de fournir leur propre serveur de nom d'utilisateur, si elle diffère de leur nom d'utilisateur local). Deuxièmement,git submodule init
copie le sous-module des entrées de.gitmodules
à.git/config
, donc il existe un point (aprèsinit
, mais avant la première utilisation degit submodule update
), où vous pouvez reconfigurer un sous-module de l'URL avant qu'il a été cloné. Si les submodules ont déjà été cloné votre(cd sub && git config remote.origin.url …)
est (aussi) besoin.L'autre utilisateur doit modifier le
.git/config
fichier pour modifier le nom d'utilisateur à son propre nom d'utilisateur. De cette façon, git utilise le droit de l'utilisateur à se connecter au serveur.git
" et spécifiques de l'utilisateur, les informations d'identification sont mis à votre~\.ssh\config
fichier.Pour traiter de cette question dans un projet open-source, nous entrons dans une URL RELATIVE à l' .gitmodules fichier. Ce sera la cause de git clone le sous-module d'URL basé sur l'URL en cours de duplication par le parent du projet de modèle d'URL. À l'aide d'un chemin d'accès relatif soigneusement évite la spécification de protocole (https, ssh) et le nom d'utilisateur entièrement:
p.s. après la publication, j'ai réalisé que ma réponse est dupe, ici, est la source que vous devez utiliser: Automatiquement accès sous-module via ssh ou https
Juste pour la référence, la solution que j'ai fini par utiliser est la suivante.
Effectivement, il est possible pour les autres de vérifier le référentiel existant.
Quand j'ai besoin de vérifier le dépôt peut être fait avec les commandes
Pour d'autres, de vérifier le super référentiel, les commandes suivantes sont utilisées.
La seule différence est le manuel de clonage de l'autre référentiel
Noter que, après l'émission de la
commande, git va vous dire que la demande de dépôt et la disposition n'est pas identique. Mais ce n'est pas fatale, et vous pouvez continuer en toute sécurité.
…; cd superrepos; git submodule init; git config submodule.name.url ssh://[email protected]/path/to/other/repos; git submodule update
.Ne pas inclure le nom d'utilisateur dans l'URL. git va demander le nom d'utilisateur et le mot de passe lorsque vous clonez/pull/etc