Jay Taylor's notes

back to listing index

src-d/go-git

[web search]
Original source (github.com)
Tags: git golang go github.com
Clipped on: 2018-07-30
Go Other
_examples plumbing/transport: http, Adds token authentication support [FixesThis commit closes issue #858. #858] 2 months ago
cli/go-git project: move imports from srcd.works to gopkg.in a year ago
config config: modules, Ignore submodules with dotdot '..' path components. … 2 months ago
internal/revision all: fixes for ineffective assign 8 months ago
plumbing Merge pull request #885 from jsravn/findentry-return-file-not-found 14 days ago
storage storage/filesystem: avoid norwfs build flag a month ago
utils Merge pull request #874 from smola/patchcontext 20 days ago
.gitignore git: worktree, Skip special git directory. FixesThis commit closes issue #814. #814 3 months ago
.travis.yml travis: dropping 1.8.x support due to golang.org/x/crypto/ssh require… 3 months ago
CODE_OF_CONDUCT.md code of conduct from https://www.contributor-covenant.org/ 8 months ago
COMPATIBILITY.md git: worktree, add Grep() method for git grep (#686) 8 months ago
CONTRIBUTING.md contributing guidelines 8 months ago
DCO added DCO 7 months ago
LICENSE *: licence change to Apache 2.0 8 months ago
MAINTAINERS MAINTAINERS: add @mcuadros, @strib and @orirawlings 8 months ago
Makefile project: move imports from srcd.works to gopkg.in a year ago
README.md README.md update 7 months ago
appveyor.yml *: upgrade to go-billy.v3, merge a year ago
blame.go Add commit hash to blame result 4 months ago
blame_test.go Add commit hash to blame result 4 months ago
common.go submodule init and update implementation 2 years ago
common_test.go all: simplification 8 months ago
doc.go forcing the usage of gopkg.in/src-d/go-git.v4 a year ago
example_test.go git: worktree, Skip special git directory. FixesThis commit closes issue #814. #814 3 months ago
object_walker.go *: simplication 8 months ago
options.go add PlainOpen variant to find .git in parent dirs 4 months ago
options_test.go worktree: Commit, tests improvements a year ago
prune.go storer: separate loose and packed object mgmt into optional ifaces 8 months ago
prune_test.go repository: oops, fix the prune test 8 months ago
references.go all: simplification 8 months ago
references_test.go update to go-billy.v4 and go-git-fixtures.v3 8 months ago
remote.go Remote.Fetch: error on missing remote reference a month ago
remote_test.go Remote.Fetch: error on missing remote reference a month ago
repository.go Fix documentation for Notes a month ago
repository_test.go Merge pull request #706 from antham/resolve-commit-sha1 3 months ago
repository_unix_test.go Add sideband support for push 11 months ago
repository_windows_test.go Add sideband support for push 11 months ago
status.go worktree: Commit method implementation a year ago
submodule.go update to go-billy.v4 and go-git-fixtures.v3 8 months ago
submodule_test.go worktree: Don't allow .gitmodules to be a symlink. Fixes CVE-2018-11235 2 months ago
worktree.go worktree: Don't allow .gitmodules to be a symlink. Fixes CVE-2018-11235 2 months ago
worktree_bsd.go use bsd superset for conditional compilation 4 months ago
worktree_commit.go new methods Worktree.[AddGlob|AddDirectory] 6 months ago
worktree_commit_test.go update to go-billy.v4 and go-git-fixtures.v3 8 months ago
worktree_linux.go Added support for non-symlink checkouts on Windows when elevated righ… 5 months ago
worktree_status.go Worktree: Provide ability to add excludes (#825) 3 months ago
worktree_test.go Worktree: Provide ability to add excludes (#825) 3 months ago
worktree_windows.go Added support for non-symlink checkouts on Windows when elevated righ… 5 months ago

README.md

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.

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

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

Press h to open a hovercard with more details.