package main import ( "fmt" "os" git "github.com/go-git/go-git/v5" . "github.com/go-git/go-git/v5/_examples" "github.com/go-git/go-git/v5/plumbing/transport/ssh" ) func main() { CheckArgs("", "", "") url, directory, privateKeyFile := os.Args[1], os.Args[2], os.Args[3] var password string if len(os.Args) == 5 { password = os.Args[4] } _, err := os.Stat(privateKeyFile) if err != nil { Warning("read file %s failed %s\n", privateKeyFile, err.Error()) return } // Clone the given repository to the given directory Info("git clone %s ", url) publicKeys, err := ssh.NewPublicKeysFromFile("git", privateKeyFile, password) if err != nil { Warning("generate publickeys failed: %s\n", err.Error()) return } r, err := git.PlainClone(directory, false, &git.CloneOptions{ // The intended use of a GitHub personal access token is in replace of your password // because access tokens can easily be revoked. // https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/ Auth: publicKeys, URL: url, Progress: os.Stdout, }) CheckIfError(err) // ... retrieving the branch being pointed by HEAD ref, err := r.Head() CheckIfError(err) // ... retrieving the commit object commit, err := r.CommitObject(ref.Hash()) CheckIfError(err) fmt.Println(commit) }