Jay Taylor's notes
back to listing indexspeedata/gogit
[web search]_testdata/testrepo.git | Basic tag handling | 2 years ago | |
README.md | Update README | 2 years ago | |
blob.go | repos.ObjectSize() | 2 years ago | |
commit.go | Support large repos | a year ago | |
commit_test.go | Fixed commit parsing with message line witout spaces | 2 years ago | |
doc.go | Commit.Tree is now a struct field, not a function | 2 years ago | |
gogit_test.go | Support large repos | a year ago | |
license.txt | Initial import | 2 years ago | |
oid.go | Basic tag handling | 2 years ago | |
reference.go | Remove unnecessary os.Stat. | a year ago | |
repository.go | numObjects not necessary in struct idxFile | a year ago | |
signature.go | Basic implementation of LookupCommit() | 2 years ago | |
tag.go | repos.ObjectSize() | 2 years ago | |
tree.go | Make length calculation in pack object a function | 2 years ago |
README.md
gogit
Pure Go read access to a git repository.
State: Actively maintained, used in production site, but without warranty, of course.
Maturity level: 4/5 (works well in all tested repositories, expect API change, few corner cases not implemented yet)
License: Free software (MIT License)
Installation: Just run go get github.com/speedata/gogit
API documentation: http://godoc.org/github.com/speedata/gogit
Contact: gundlach@speedata.de, @speedata
Repository: https://github.com/speedata/gogit
Dependencies: None
Contribution: We like to get any kind of feedback (success stories, bug reports, merge requests, ...)
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/github.com/speedata/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 http://ctanmirror.speedata.de. This is a
mirror of CTAN, the comprehensive TeX archive network with approx. 25GB 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 60 GB (Oct. 2013).