【问题标题】:Git Submodule - Permission DeniedGit 子模块 - 权限被拒绝
【发布时间】:2014-11-15 10:02:25
【问题描述】:

我无法克隆我的私有 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.

【问题讨论】:

  • 你能独立克隆git@github.com:Path吗?只是为了检查直接克隆是否可以工作以及您是否有权访问。
  • 是的,我做到了,我得到了除了子模块之外的整个 repo,
  • 你能检查.gitmodules的内容(在你刚刚克隆的repo中),然后尝试克隆其中引用的url。
  • 你能告诉我该怎么做吗?我对 git 有点陌生,所以请和我一起裸露。
  • 正如@VonC 提到的,在检查了.gitmodules 中的内容后,我发现有一个与我必须刷新我的ssh 密钥的主要仓库不同的仓库。这样做之后,它就可以工作了。

标签: git github git-submodules


【解决方案1】:

我也面临同样的问题。问题出在您的 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"

这对我有用!

【讨论】:

  • 我从未配置过 ssh 密钥,但在配置了 ssh 密钥后一切正常
【解决方案2】:
  • 在 Windows 上:

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

【讨论】:

  • 问题是当它发生在 Windows gitlab 运行器中时......它默认使用 CMD!
  • 在使用 Windows 终端时遇到了同样的问题。使用 Git Lab 并运行 git submodule update 修复它
【解决方案3】:

我遇到了这个问题。就我而言,公钥 (~/.ssh/id_rsa.pub) 未在服务器上正确设置。

确保获得所有子模块:

参考:Git update submodules recursively

# 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。这将让您输入用户名和密码。但这可能会导致您的队友出现问题并构建自动化。先和他们谈谈。

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 必须通过智能方式接受答案,只需转到子模块文件夹然后克隆 https 链接 -> WORK 100%
      • @famfamfam 绝对不是。如果您需要进行编辑并能够推送您的更改,您不想使用 HTTPS 协议。
      【解决方案6】:

      对于 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

      【讨论】:

        【解决方案7】:

        我通过在父文件夹及其子文件夹中使用 git init 错误地创建了一个子模块。刚刚删除 .git 文件夹并在正确的父文件夹中使用 git init 重新开始。

        【讨论】:

          【解决方案8】:

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

          git submodule update
          

          效果很好。

          【讨论】:

            【解决方案9】:

            在我的情况下,尽管 git clone 成功,但当我的项目被放置在系统目录(程序文件)中时出现问题。

            另外,这个问题不在 SSH 密钥上,这也没关系。

            将其移至文件夹 C:\Users\username 后即可使用。

            如果您使用 Windows,请尝试一下

            【讨论】:

              【解决方案10】:

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

              【讨论】:

                猜你喜欢
                • 2018-08-17
                • 1970-01-01
                • 2016-10-30
                • 2020-07-30
                • 2011-12-15
                • 1970-01-01
                • 1970-01-01
                • 2017-12-02
                • 2018-04-15
                相关资源
                最近更新 更多