Skip to content

jpeletier/go-git

This branch is 242 commits behind src-d/go-git:master.

Folders and files

NameName
Last commit message
Last commit date
Jun 8, 2018
Mar 7, 2017
Oct 9, 2018
Nov 26, 2017
Oct 15, 2018
Oct 12, 2018
Jul 10, 2018
Apr 18, 2018
Sep 10, 2018
Dec 7, 2017
Dec 12, 2017
Dec 7, 2017
Dec 21, 2017
Dec 7, 2017
Dec 7, 2017
Mar 7, 2017
Oct 17, 2018
Jun 18, 2017
Oct 15, 2018
Oct 15, 2018
Feb 13, 2017
Sep 7, 2018
Mar 13, 2017
Apr 18, 2018
Sep 10, 2018
Sep 10, 2018
Sep 7, 2018
Oct 16, 2018
May 4, 2017
Oct 2, 2018
Sep 7, 2018
Jan 21, 2018
Oct 15, 2018
Oct 16, 2018
Oct 16, 2018
Oct 16, 2018
Oct 16, 2018
Sep 1, 2017
Sep 1, 2017
Oct 6, 2018
Nov 23, 2017
May 30, 2018
Aug 29, 2018
Apr 10, 2018
Sep 6, 2018
Sep 10, 2018
Mar 12, 2018
May 11, 2018
Aug 29, 2018
Mar 12, 2018

Repository files navigation

go-git logo GoDoc Build Status Build status codecov.io Go Report Card

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 types 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.

Comparison with git

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.

Installation

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 get clones the package, is the latest tag matching v4.* cloned and not the master branch.

Examples

Please note that the functions CheckIfError and Info used in the examples are from the examples package just to be used in the examples.

Basic example

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

In-memory example

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 <[email protected]>
Date:   Sat Nov 12 21:18:41 2016 +0100

    index: ReadFrom/WriteTo returns IndexReadError/IndexWriteError. (#9)

commit df707095626f384ce2dc1a83b30f9a21d69b9dfc
Author: Santiago M. Mola <[email protected]>
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

Contribute

Contributions are more than welcome, if you are interested please take a look to our Contributing Guidelines.

License

Apache License Version 2.0, see LICENSE

About

A highly extensible Git implementation in pure Go.

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 99.8%
  • Other 0.2%