package main import ( "fmt" "github.com/go-git/go-git/v5" . "github.com/go-git/go-git/v5/_examples" "github.com/go-git/go-git/v5/config" "github.com/go-git/go-git/v5/plumbing" "github.com/go-git/go-git/v5/storage/memory" ) // Example of how to: // - Create a new in-memory repository // - Create a new remote named "example" // - List remotes and print them // - Pull using the new remote "example" // - Iterate the references again, but only showing hash references, not symbolic ones // - Remove remote "example" func main() { // Create a new repository Info("git init") r, err := git.Init(memory.NewStorage(), nil) CheckIfError(err) // Add a new remote, with the default fetch refspec Info("git remote add example https://github.com/git-fixtures/basic.git") _, err = r.CreateRemote(&config.RemoteConfig{ Name: "example", URLs: []string{"https://github.com/git-fixtures/basic.git"}, }) CheckIfError(err) // List remotes from a repository Info("git remotes -v") list, err := r.Remotes() CheckIfError(err) for _, r := range list { fmt.Println(r) } // Fetch using the new remote Info("git fetch example") err = r.Fetch(&git.FetchOptions{ RemoteName: "example", }) CheckIfError(err) // List the branches // > git show-ref Info("git show-ref") refs, err := r.References() CheckIfError(err) err = refs.ForEach(func(ref *plumbing.Reference) error { // The HEAD is omitted in a `git show-ref` so we ignore the symbolic // references, the HEAD if ref.Type() == plumbing.SymbolicReference { return nil } fmt.Println(ref) return nil }) CheckIfError(err) // Delete the example remote Info("git remote rm example") err = r.DeleteRemote("example") CheckIfError(err) }