package git import ( "os" "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing" "github.com/sirupsen/logrus" ) // Clone runs a git clone which accounts for different default branches. func Clone(dir, url string) error { if _, err := os.Stat(dir); os.IsNotExist(err) { logrus.Debugf("'%s' does not exist, attempting to git clone from '%s'", dir, url) _, err := git.PlainClone(dir, false, &git.CloneOptions{URL: url, Tags: git.AllTags}) if err != nil { logrus.Debugf("cloning from default branch failed, attempting from main branch") // try with main branch because Git is being a Git _, err := git.PlainClone(dir, false, &git.CloneOptions{ URL: url, Tags: git.AllTags, ReferenceName: plumbing.ReferenceName("refs/heads/main"), }) if err != nil { return err } } } logrus.Debugf("'%s' has been git cloned successfully", dir) return nil }