gogit
Pure Go read access to a git repository.
Cloned from github.com/speedata/gogit by Patrick Gundlach gundlach@speedata.de
Updated for go modules.
State: Not really actively maintained, but used in production site. Without warranty, of course.
Maturity level: 4/5 (works well in all tested repositories.
License: Free software (MIT License)
Installation: Just run go get bitbucket.org/_metalogic_/gogit
API documentation: https://godoc.org/github.com/speedata/gogit
Contact: dev@roderickmorrison.net
Repository: https://bitbucket.org/_metalogic_/gogit
Example
Sample application to list the latest directory (recursively):
package main
import (
"github.com/speedata/gogit"
"log"
"os"
"path"
"path/filepath"
)
func walk(dirname string, te *gogit.TreeEntry) int {
log.Println(path.Join(dirname, te.Name))
return 0
}
func main() {
wd, err := os.Getwd()
if err != nil {
log.Fatal(err)
}
repository, err := gogit.OpenRepository(filepath.Join(wd, "src/bitbucket.org/_metalogic_/gogit/_testdata/testrepo.git"))
if err != nil {
log.Fatal(err)
}
ref, err := repository.LookupReference("HEAD")
if err != nil {
log.Fatal(err)
}
ci, err := repository.LookupCommit(ref.Oid)
if err != nil {
log.Fatal(err)
}
ci.Tree.Walk(walk)
}
Sample application
We use gogit
as the backend in https://ctanmirror.speedata.de. This is a
mirror of CTAN, the comprehensive TeX archive network with approx. 30GB of
data. We rsync it from the main site at ctan.org every night and add the
changes to a git repository (with the regular git command). Then we use this web
front end to retrieve the historic files.
The git repository is around 500 GB (May 2017) and dates back to 2013.