Git子模块 - 权限被拒绝

时间:2014-09-21 08:00:57

标签: git github git-submodules

我无法克隆私有git存储库中存在的子模块。我有权访问整个存储库,

使用了以下命令但是工作,请帮忙。克隆现有存储库中子模块的正确方法是什么?

djrecker$ git submodule update --init --recursive
Submodule 'Path' (git@github.com:Path) registered for path 'App'
Cloning into 'Path'...
Permission denied (publickey).
fatal: Could not read from remote repository.

9 个答案:

答案 0 :(得分:26)

我遇到了同样的问题。问题出在你的github repo上,你可能正在使用一些旧的ssh密钥。

您需要更新当前的ssh密钥。

Steps involved are:

1. vim ~/.ssh/id_rsa.pub
2. copy the ssh key
3. Go to the github settings
4. Select the option ssh keys
5. Remove the old ssh keys not used anymore.
6. Add a new ssh key.
7. Try running the "git submodule update --recursive"

这对我有用!!

答案 1 :(得分:10)

我有这个问题。就我而言,公钥(〜/ .ssh / id_rsa)没有在服务器上正确设置。

确保您获得所有子模块:

参考:Git update submodule recursive

# This must be called twice. Once for new and once for existing submodules.
git submodule update --init --recursive
git submodule update --recursive

使用密钥诊断权限问题:

检查子模块的详细信息

  • 在项目根文件夹中打开.gitmodules,确保一切正常。根据@VonC的建议,尝试将它们克隆到一个单独的文件夹中。
  • 您可能希望将子模块从使用SSH切换到HTTPS。这将允许您键入用户名和密码。但这可能会导致您的队友出现问题并构建自动化。先与他们交谈。

答案 2 :(得分:3)

有趣的是,在使用HTTPS链接的类似场合为我工作。

答案 3 :(得分:3)

  • 在Windows上:

就我而言,当我使用常规命令行(Git CMD)时,它抱怨着同样的问题。然后我尝试了Git Bash,再也没有问题了。

答案 4 :(得分:0)

在我的情况下,此问题是由控制台引起的,它没有要求我输入密码。解决方案是将控制台从CMDER更改为Gitbash。当我使用CMDER时,它不会显示密码窗口,从而导致此访问被拒绝。

答案 5 :(得分:0)

用于Linux / GitBash的TortoiseGit / Windows子系统也有同样的问题。 解决方案是通过代理(密钥)而非密码使用身份验证。

对于 TortoiseGit

  • 运行选美
  • 添加您的密钥
  • 输入密码
  • TortoiseGit菜单->子模块更新...

(没有选美的git clone,它会要求输入密码并按预期工作,但是git update失败并显示错误)

对于 WS4L

$ eval `ssh-agent -s`
$ chmod 600 /path/to/key
$ ssh-add /path/to/key

进行了git submodule update

答案 6 :(得分:0)

我通过在父文件夹及其子文件夹中使用git init创建了错误的子模块。只需删除.git文件夹,然后从正确的父文件夹中的git init开始。

答案 7 :(得分:-1)

VS Code中的

Win10 + git bash终端。 就我而言,我是通过VS Code使用git bash的。使用子模块时,git会弹出一个窗口以输入密钥的密码。通过VSCode重击不会弹出此窗口。使用Windows上下文菜单项,在repo文件夹中显示“ Git Bash Here”,如下所示: Context menu Screen Grab

git submodule update

出色地工作。

答案 8 :(得分:-1)

我有同样的问题。我从.gitmodules中删除了该条目并执行了git submodule init; git submodule update,然后从文件系统中删除了该条目并执行了git submodule update --remote,它又开始下载子模块了。