web-dev-qa-db-fra.com

L'URL du sous-module Git n'inclut pas le nom d'utilisateur?

J'ai un référentiel git configuré avec plusieurs sous-modules, ce qui crée un .gitmodules fichier qui est un fichier suivi dans le référentiel parent. Cependant, d'autres développeurs souhaitent travailler sur ce référentiel et consulter les sous-modules. Mais actuellement, les URL des référentiels de sous-modules distants contiennent mon nom d'utilisateur; dans le .gitmodules fichier c'est quelque chose comme:

[submodule foo]
  path = sub/foo
  url = https://[email protected]/git/foo.git

De toute évidence, les autres développeurs ne peuvent pas récupérer de example.com as myuser (ils n'ont pas mon mot de passe); comment puis-je avoir un référentiel principal vers lequel plusieurs développeurs peuvent tirer/pousser et leur permettre d'avoir un accès individuel aux sous-modules (la configuration d'un nom d'utilisateur unique qu'ils partagent tous sur le serveur hôte du sous-module fonctionnerait, mais ce n'est pas une bonne gestion des utilisateurs) ?

46
MidnightLightning

Si je comprends bien, vous utilisez l'authentification de base HTTP sur HTTPS pour autoriser uniquement certains développeurs à accéder au référentiel. Dans ce cas, vous pouvez valider un .gitmodules qui ressemble à:

[submodule foo]
  path = sub/foo
  url = https://example.com/git/foo.git

... c'est-à-dire sans nom d'utilisateur, puis demandez à chaque développeur de mettre son nom d'utilisateur et son mot de passe dans son ~/.netrc fichier. (Si vous utilisez Windows, alors il y a quelques bons conseils à ce sujet ici .) Un simple .netrc le fichier pourrait ressembler à:

machine example.com
  login myusername
  password areamandyingtotellsomeonehiscoolpassword

Mise à jour: une alternative, qui n'implique pas l'utilisation de .netrc, serait la suivante:

Encore une fois, supprimez le nom d'utilisateur de l'URL dans .gitmodules et valider et pousser ce changement. Lorsque quelqu'un clone le référentiel, il s'exécutait d'abord:

git submodule init

... qui définira l'option de configuration submodule.sub/foo.url à l'URL dans .gitmodules. Cependant, l'étape init ne clonera pas le sous-module jusqu'à ce que vous fassiez git submodule update, vous pouvez donc faire:

git config submodule.sub/foo.url https://myuser:[email protected]/git/foo.git

... puis:

git submodule update

Pour cloner les sous-modules avec le bon nom d'utilisateur. Notez que votre nom d'utilisateur et votre mot de passe pour l'authentification HTTP seront stockés dans votre configuration git.

33
Mark Longair

En fait, vous pouvez spécifier un chemin "relatif" vers un sous-module dans .gitconfig:

[submodule foo]  
path = sub/foo  
url = ./git/foo.git

Cette URL fera référence au même hôte ( https://example.com ) que le référentiel lui-même.

30
AntonK

Ce fil m'a aidé, mais j'ajouterais qu'après avoir modifié le contenu du fichier . Gitmodules vous devez exécuter la commande suivante pour que git le récupère:

git submodule sync
10
user698116

La réponse d'Antonk ne fonctionnera pas pour les équipes car le .gitconfig ou .git/config d'un individu n'est pas sous contrôle de version.

Cependant, cela m'a conduit à expérimenter l'url dans des modules .git.

[submodule foo]
path = sub/foo
url = ../foo.git

travaillé pour moi, en supposant que le dépôt de sous-module est dans la même URL que le parent.

9
rhamilton

Vous pouvez utiliser l'authentification ssh.

il suffit de remplacer cela

[submodule foo]
  path = sub/foo
  url = https://[email protected]/git/foo.git

avec ça

[submodule foo]
  path = sub/foo
  url = [email protected]:git/foo.git
5
mkilic

J'ai eu ce problème en combinaison avec Gerrit (via ssh).
La suppression du nom d'utilisateur a fonctionné,
donc mon . gitmodules ressemble maintenant à ceci:

[submodule "sub/module1"]
    path = sub/module1
    url = ssh://servername:29418/module1
2
Roman

Tu peux essayer .insteadOf, par exemple.

git config --global url."ssh://[email protected]:29418/".insteadOf "ssh://gerrit.foobar.com:29418/"

Chaque développeur devra le faire une fois sur chaque ordinateur sur lequel il travaille.

1
bviktor

Modifiez votre .gitmodules et supprimez le nom d'utilisateur du url:

[submodule foo]
  path = sub/foo
  url = https://example.com/git/foo.git

Et enfin:

cd foo/
git submodule init
git submodule update

# Will be prompted to provide username and password
0