This is a Golang library for programmatically working with the git command (via the os/exec package).
In general, the options for working with git repositories in Go are:
go-gitis a git implementation written in pure Gogit2goare the Golang C-bindings to thelibgit2project (requires CGO)- Shelling out to the
gitcommand (using theos/execpackage) and parsing results
This library uses the 3rd option (shelling out to git) and provides an abstraction layer to simplify using the output of various git subcommands.
package main
import (
"context"
"log"
"os"
"github.com/mergestat/gitutils/clone"
)
func main() {
err := clone.Exec(context.Background(), "https://github.com/mergestat/gitutils", "some-dir")
if err != nil {
log.Fatal(err)
}
}package main
import (
"context"
"errors"
"fmt"
"io"
"log"
"os"
"github.com/mergestat/gitutils/gitlog"
)
func main() {
iter, err := gitlog.Exec(context.TODO(), "/path/to/some/local/repo", gitlog.WithStats(false))
if err != nil {
log.Fatal(err)
}
for {
if commit, err := iter.Next(); err != nil {
if errors.Is(err, io.EOF) {
break
}
log.Fatal(err)
} else {
fmt.Println(commit.SHA)
}
}
}See more examples in the examples directory.