
Product
Socket for Jira Is Now Available
Socket for Jira lets teams turn alerts into Jira tickets with manual creation, automated ticketing rules, and two-way sync.
shylinux.com/x/go-git/v5/utils
Advanced tools
go-git is a highly extensible git implementation library written in pure Go.
It can be used to manipulate git repositories at low level (plumbing) or high level (porcelain), through an idiomatic Go API. It also supports several type of storage, such as in-memory filesystems, or custom implementations thanks to the Storer interface.
It's being actively develop since 2015 and is being use extensively by source{d} and Keybase, and by many other libraries and tools.
go-git aims to be fully compatible with git, all the porcelain operations are implemented to work exactly as git does.
git is a humongous project with years of development by thousands of contributors, making it challenging for go-git implement all the features. You can find a comparison of go-git vs git in the compatibility documentation.
The recommended way to install go-git is:
go get -u gopkg.in/src-d/go-git.v4/...
We use gopkg.in for having a versioned API, this means that when
go getclones the package, is the latest tag matchingv4.*cloned and not the master branch.
Please note that the functions
CheckIfErrorandInfoused in the examples are from the examples package just to be used in the examples.
A basic example that mimics the standard git clone command
// Clone the given repository to the given directory
Info("git clone https://github.com/src-d/go-git")
_, err := git.PlainClone("/tmp/foo", false, &git.CloneOptions{
URL: "https://github.com/src-d/go-git",
Progress: os.Stdout,
})
CheckIfError(err)
Outputs:
Counting objects: 4924, done.
Compressing objects: 100% (1333/1333), done.
Total 4924 (delta 530), reused 6 (delta 6), pack-reused 3533
Cloning a repository into memory and printing the history of HEAD, just like git log does
// Clones the given repository in memory, creating the remote, the local
// branches and fetching the objects, exactly as:
Info("git clone https://github.com/src-d/go-siva")
r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{
URL: "https://github.com/src-d/go-siva",
})
CheckIfError(err)
// Gets the HEAD history from HEAD, just like does:
Info("git log")
// ... retrieves the branch pointed by HEAD
ref, err := r.Head()
CheckIfError(err)
// ... retrieves the commit history
cIter, err := r.Log(&git.LogOptions{From: ref.Hash()})
CheckIfError(err)
// ... just iterates over the commits, printing it
err = cIter.ForEach(func(c *object.Commit) error {
fmt.Println(c)
return nil
})
CheckIfError(err)
Outputs:
commit ded8054fd0c3994453e9c8aacaf48d118d42991e
Author: Santiago M. Mola <santi@mola.io>
Date: Sat Nov 12 21:18:41 2016 +0100
index: ReadFrom/WriteTo returns IndexReadError/IndexWriteError. (#9)
commit df707095626f384ce2dc1a83b30f9a21d69b9dfc
Author: Santiago M. Mola <santi@mola.io>
Date: Fri Nov 11 13:23:22 2016 +0100
readwriter: fix bug when writing index. (#10)
When using ReadWriter on an existing siva file, absolute offset for
index entries was not being calculated correctly.
...
You can find this example and many others at the examples folder
Contributions are more than welcome, if you are interested please take a look to our Contributing Guidelines.
Apache License Version 2.0, see LICENSE
FAQs
Unknown package
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket for Jira lets teams turn alerts into Jira tickets with manual creation, automated ticketing rules, and two-way sync.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.

Security News
NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.