package git import ( "fmt" "os" gogit "github.com/go-git/go-git/v5" ) type GitOptions struct { URL string RecurseSubmodule bool } func (g *GitOptions) Clone() (string, error) { a := &gogit.CloneOptions{ URL: g.URL, Progress: os.Stdout, } if err := a.Validate(); err != nil { return fmt.Sprintln("Validation failed"), err } dir, err := os.MkdirTemp("", "clone") if err != nil { return "", err } defer os.RemoveAll(dir) _, err = gogit.PlainClone(dir, false, a) if err != nil { return "", err } return "Success", nil }