【发布时间】:2015-10-24 01:57:42
【问题描述】:
我正在尝试通过syscall 调用 git 来克隆一个 git 存储库。 (我知道有git2go,但这不是我想要的。我绝对想做一个syscall)
git, lookErr := exec.LookPath("git")
if lookErr != nil {
fmt.Fprintf(os.Stderr, "%s\n", lookErr)
os.Exit(126)
}
args := []string{"clone", "http://github.com/some/repo.git"}
var env = os.Environ()
execErr := syscall.Exec(git, args, env)
if execErr != nil {
panic(execErr)
}
所以我要执行的是git clone http://github.com/some/repo.git,手动执行它就可以了。但是当我像上面的代码 sn-p 那样在 go 中运行它时,git 失败了:
git: 'http://github.com/some/repo.git' 不是 git 命令。请参阅“git --help”。
为什么 git 会将第二个参数解释为另一个命令?它应该是远程<repo> URL,git clone [options] [--] <repo> [<dir>]。
如何正确传递参数以使 git 具有预期的行为?
【问题讨论】:
标签: go arguments system-calls