【发布时间】:2020-03-03 22:07:50
【问题描述】:
我无法从 Go 的 exec.Command 运行 git pull --tags,因为我没有访问权限..
代码...
func SimpleCommand(start string, args ...string) (result string) {
cmd := exec.Command(start, args...)
//cmd.Dir = dir
bytes, err := cmd.Output()
if err != nil {
fmt.Print(err)
}
s := string(bytes)
return s
}
func main() {
SimpleCommand("git", "pull", "--tags")
}
通常当我运行 git 命令时,我会在 Git-bash 中手动执行它,并且我的 .bashrc 文件设置如下...
eval $(ssh-agent -s)
ssh-add c:/sshkeys/id_rsa
ssh-add c:/sshkeys/github
这很好用,但是当我在 Go 程序中运行 git 命令时,它显然不会运行这些命令。所以我得到以下错误...
git@gitlab.com:权限被拒绝(公钥)。致命:无法读取 来自远程存储库。
请确保您拥有正确的访问权限和存储库 存在。
我尝试使用 SimpleCommand 函数单独运行这些命令,但是找不到 eval 命令(它似乎不是可执行文件),
我也觉得应该有更好的方法来做到这一点,我无法让 go 程序以这样的方式管理 ssh 密钥,以便能够使用它们来运行 git 命令。
【问题讨论】:
-
Go 不在 bash shell 中运行命令。而是尝试设置
core.sshCommand。例如git config core.sshCommand "ssh -i c:/sshkeys/id_rsa -i s:/sshkeys/github"。这很有用,因为 git config 设置可以是全局的或本地的。 -
查看这个答案以获取各种解决方法的线索stackoverflow.com/questions/7772190/…
-
@Mark 我昨晚进行了更深入的研究,发现了 core.sshCommand 并最终让它工作,我会发布更多答案,但如果你想继续?
-
@user3755946 一定要发布你的答案,很高兴你得到它的工作。