【问题标题】:Cloning a repository with a bash script on macOS在 macOS 上使用 bash 脚本克隆存储库
【发布时间】:2020-10-26 14:25:33
【问题描述】:

我编写了一个 bash 脚本,它遍历包含 SSH URL 的 JSON 数组并将存储库克隆到一个临时文件夹。

这就是 bash 脚本的样子:

eval "$(ssh-agent -s)"
ssh-add /Users/schotsl/.ssh/id_ed25519

jq -c '.[]' ./../repos.json | while read i; do
    git clone $i
done

但是当我运行 bash 脚本时,这是结果输出:

Cloning into 'krijn-text-4.git"'...
"git@codebasehq.com: Permission denied (publickey).
fatal: Could not read from remote repository.

编辑:

我应该在之前澄清这一点,以确保我们的密钥是正确的,我重新生成了我的密钥。现在,当我在没有将密钥添加到我的 SSH 代理的情况下运行克隆命令时,我得到了与预期相同的错误。使用此命令添加密钥后:

ssh-add /Users/schotsl/.ssh/id_ed25519

我可以很好地下载 repo,但不知何故脚本不能?

【问题讨论】:

  • 这似乎是一个ssh 问题,与您获取要克隆的 URL 的方式无关。您确定您向代理添加了正确的密钥并将相应的公钥添加到存储库服务器吗?
  • 对不起,我已经扩展了您的答案以澄清,我还从与脚本相同的 JSON 文件复制了远程 URL @chepner
  • JSON 究竟是什么样子的?
  • 啊:刚刚注意到 Git 输出中的尾随 "。您可能需要 jq -cr 之类的东西来输出原始文本,而不是 JSON 字符串,但它仍然有助于显示您正在使用的 JSON。
  • 在循环 jst 中回显 i 变量以确认存储库正确

标签: bash git


【解决方案1】:

您的 jq 过滤器正在输出 JSON 字符串,例如

"git@codebasehq.com:/path/to/krijn-text-4.git"

当您需要适合ssh 使用的原始字符串时;注意主机是"git@codebasehq.com,而不是git@codebasehq.com

使用-r 选项进行原始输出。

jq -cr '.[]' ./../repos.json | while IFS= read -r i; do
  git clone "$i"
done

【讨论】:

    猜你喜欢
    • 2019-06-07
    • 2020-10-06
    • 2018-02-20
    • 1970-01-01
    • 2019-05-09
    • 2021-09-04
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    相关资源
    最近更新 更多