Git 如何在Golang中创建交互式命令执行?

Git 如何在Golang中创建交互式命令执行?,git,go,exec,Git,Go,Exec,我正在尝试从我的Golang程序中自动执行git推送。是否有任何方法可以将用户名和密码从父程序传递到exec命令 func gitPush(gitExeLocation string, currentDir string) { fmt.Println("Pushing ...") args := []string{"push", "-f", "origin", "HEAD"} cmd := exec.Command(gitExeLocation, args...)

我正在尝试从我的Golang程序中自动执行git推送。是否有任何方法可以将用户名和密码从父程序传递到exec命令

func gitPush(gitExeLocation string, currentDir string) {

    fmt.Println("Pushing ...")
    args  := []string{"push", "-f", "origin", "HEAD"}

    cmd := exec.Command(gitExeLocation, args...)
    cmd.Dir = currentDir
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr

    stdin, err := cmd.StdinPipe()
    if err != nil {
        fmt.Println(err) 
    }
    defer stdin.Close()
    err = cmd.Start()
    if err != nil {
        fmt.Println(err) 
        return
    }

    time.Sleep(5 * time.Second)
    io.WriteString(stdin, "<Username>\n")
    time.Sleep(3 * time.Second)
    io.WriteString(stdin, "<Password>\n")

    err = cmd.Wait()
    if err != nil {
        fmt.Println(err) 
        return
    }

    fmt.Println("Succeeded.\n")

}
func gitPush(gitexlocation字符串、currentDir字符串){
fmt.Println(“推…”)
args:=[]字符串{“push”、“-f”、“origin”、“HEAD”}
cmd:=exec.Command(gitexlocation,args…)
cmd.Dir=currentDir
cmd.Stdout=os.Stdout
cmd.Stderr=os.Stderr
stdin,err:=cmd.StdinPipe()
如果错误!=零{
fmt.Println(错误)
}
延迟标准关闭()
err=cmd.Start()
如果错误!=零{
fmt.Println(错误)
返回
}
时间。睡眠(5*时间。秒)
io.WriteString(标准输入法“\n”)
时间。睡眠(3*时间。秒)
io.WriteString(标准输入法“\n”)
err=cmd.Wait()
如果错误!=零{
fmt.Println(错误)
返回
}
fmt.Println(“成功。\n”)
}

您需要像终端用户一样解析输出。为什么不在不使用交互式提示的情况下提供密码?(或者更好,使用ssh密钥这一首选且更安全的方法)@JimB:我不清楚如何通过任何其他方式提供密码。如果你能告诉我一个更好的方法,我将不胜感激。最好的解决方案是使用适当的ssh公钥(应该通过ssh代理进行加密和访问,以获得更高的安全性),这是我用来在多个系统上设置ssh for git的另一个有用资源;谢谢各位。我通过设置GIT_ASKPASS环境变量使其工作。然而,我希望有一个更干净的方式来完成它。另外,我同意SSH选项更安全,但是将其作为用户使用我的应用程序的要求有点限制。您需要像终端上的用户一样解析输出。为什么不在不使用交互式提示的情况下提供密码?(或者更好,使用ssh密钥这一首选且更安全的方法)@JimB:我不清楚如何通过任何其他方式提供密码。如果你能告诉我一个更好的方法,我将不胜感激。最好的解决方案是使用适当的ssh公钥(应该通过ssh代理进行加密和访问,以获得更高的安全性),这是我用来在多个系统上设置ssh for git的另一个有用资源;谢谢各位。我通过设置GIT_ASKPASS环境变量使其工作。然而,我希望有一个更干净的方式来完成它。另外,我同意SSH选项更安全,但是将其作为用户使用我的应用程序的要求有点限制。