Git to Go; bindings for libgit2. Like McDonald's but tastier.
Go to file
Carlos Martín Nieto 5d0a4c752a Bump vendored libgit2 to ee89941fa 2017-01-09 22:13:18 +00:00
script Get rid of the with-static.sh script 2016-11-01 00:17:51 +01:00
vendor Bump vendored libgit2 to ee89941fa 2017-01-09 22:13:18 +00:00
.gitmodules Remove left-over submodule configuration 2014-06-07 19:29:45 +02:00
.travis.yml Only test against 1.5 and up 2016-11-01 00:17:51 +01:00
LICENSE Initial commit 2013-03-05 20:53:04 +01:00
Makefile Get rid of the with-static.sh script 2016-11-01 00:17:51 +01:00
README.md Get rid of the with-static.sh script 2016-11-01 00:17:51 +01:00
blame.go Upgrade to libgit2 to 0f9d15493d5d8ad4353dd7beed52c9567334f6e5 2016-02-17 18:23:52 +01:00
blame_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
blob.go Merge remote-tracking branch 'upstream/master' into next 2016-08-27 21:07:44 +02:00
blob_test.go Merge pull request #336 from libgit2/cmn/test-parallel 2016-08-27 21:03:29 +02:00
branch.go BranchAll maps GIT_BRANCH_ALL 2016-05-29 15:01:07 +02:00
branch_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
checkout.go Expose baseline field in CheckoutOptions 2015-09-18 09:50:59 -04:00
cherrypick.go Cherrypick 2015-03-04 15:52:54 -08:00
cherrypick_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
clone.go Don't call the finalizer on a borrowed repository 2015-08-31 16:07:37 +02:00
clone_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
commit.go Add method to fetch raw commit message 2016-09-09 15:27:07 +02:00
config.go Merge remote-tracking branch 'upstream/master' into next 2016-02-15 15:02:19 +01:00
config_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
credentials.go Remove useless includes 2014-12-11 02:59:07 +01:00
describe.go Move from an Object interface to a type 2015-08-04 14:47:10 +02:00
describe_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
diff.go Merge remote-tracking branch 'upstream/master' into next 2016-08-27 21:07:44 +02:00
diff_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
features.go Add Features() to retrieve the compile-time features of libgit2 2016-10-31 21:09:24 +01:00
git.go Update to 0.25-rc1 2016-11-19 15:09:41 +01:00
git_test.go Merge remote-tracking branch 'upstream/master' into next 2016-08-27 21:07:44 +02:00
graph.go Remove "Graph" prefix on method names 2015-02-12 18:49:54 +01:00
handles.go handles: use real pointers to keep track of handles 2016-02-18 17:33:44 +01:00
ignore.go Add support for ignore 2015-10-20 15:07:54 +09:00
index.go Merge remote-tracking branch 'upstream/master' into next 2016-02-15 15:02:19 +01:00
index_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
merge.go Merge branch 'master' into next 2016-02-18 15:57:46 +01:00
merge_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
note.go Create a NotesCollection for managing notes 2015-06-28 01:19:22 +02:00
note_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
object.go Move from an Object interface to a type 2015-08-04 14:47:10 +02:00
object_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
odb.go odb: Expose git_odb_object_type() as OdbObject.Type() 2016-07-19 22:48:52 +03:00
odb_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
packbuilder.go packbuilder: use HandleList for C function callbacks. 2015-05-22 09:02:24 +02:00
patch.go Add missing thread-locking 2014-12-11 02:46:42 +01:00
patch_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
push_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
refdb.go Remove useless includes 2014-12-11 02:59:07 +01:00
reference.go Move from an Object interface to a type 2015-08-04 14:47:10 +02:00
reference_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
remote.go Update to 1dc4491 2016-04-23 15:35:22 +02:00
remote_test.go Merge remote-tracking branch 'upstream/master' into next 2016-08-27 21:07:44 +02:00
repository.go Merge remote-tracking branch 'upstream/master' into next 2016-08-27 21:07:44 +02:00
reset.go ResetDefaultToCommit maps git_reset_default 2016-05-29 14:53:26 +02:00
reset_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
revparse.go Move from an Object interface to a type 2015-08-04 14:47:10 +02:00
revparse_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
settings.go Move the settings into the main git2go 2014-06-07 18:57:46 +02:00
settings_test.go Move the settings into the main git2go 2014-06-07 18:57:46 +02:00
signature.go Default signature 2015-03-04 15:52:57 -08:00
stash.go Fix error after updating to latest changes 2016-02-20 14:58:48 +02:00
stash_test.go Add stash support 2015-09-21 14:50:57 +03:00
status.go StatusConflicted maps GIT_STATUS_CONFLICTED 2016-05-29 15:01:17 +02:00
status_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
submodule.go Submodule: use the Repository constructor 2015-06-30 19:12:39 +02:00
submodule_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
tag.go Tag Remove 2016-05-29 14:57:00 +02:00
tag_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
tree.go Use Filemode in TreeBuilder.Insert, and add test coverage for some 2016-02-17 18:23:52 +01:00
tree_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
walk.go Add RevWalk.SimplifyFirstParent() 2016-02-07 03:15:40 +00:00
wrapper.c Update to 1dc4491 2016-04-23 15:35:22 +02:00

README.md

git2go

GoDoc Build Status

Go bindings for libgit2. The master branch follows the latest libgit2 release. The versioned branches indicate which libgit2 version they work against.

Installing

This project wraps the functionality provided by libgit2. If you're using a stable version, install it to your system via your system's package manager and then install git2go as usual.

Otherwise (next which tracks an unstable version), we need to build libgit2 as well. In order to build it, you need cmake, pkg-config and a C compiler. You will also need the development packages for OpenSSL and LibSSH2 installed if you want libgit2 to support HTTPS and SSH respectively.

Stable version

git2go has master which tracks the latest release of libgit2, and versioned branches which indicate which version of libgit2 they work against. Install the development package on your system via your favourite package manager or from source and you can use a service like gopkg.in to use the appropriate version. For the libgit2 v0.22 case, you can use

import "gopkg.in/libgit2/git2go.v22"

to use a version of git2go which will work against libgit2 v0.22 and dynamically link to the library. You can use

import "github.com/libgit2/git2go"

to use the 'master' branch, which works against the latest release of libgit2, whichever that one is at the time.

From next

The next branch follows libgit2's master branch, which means there is no stable API or ABI to link against. git2go can statically link against a vendored version of libgit2.

Run go get -d github.com/libgit2/git2go to download the code and go to your $GOPATH/src/github.com/libgit2/git2go directory. From there, we need to build the C code and put it into the resulting go binary.

git checkout next
git submodule update --init # get libgit2
make install

will compile libgit2. Run go install so that it's statically linked to the git2go package.

Parallelism and network operations

libgit2 uses OpenSSL and LibSSH2 for performing encrypted network connections. For now, git2go asks libgit2 to set locking for OpenSSL. This makes HTTPS connections thread-safe, but it is fragile and will likely stop doing it soon. This may also make SSH connections thread-safe if your copy of libssh2 is linked against OpenSSL. Check libgit2's THREADSAFE.md for more information.

Running the tests

For the stable version, go test will work as usual. For the next branch, similarly to installing, running the tests requires building a local libgit2 library, so the Makefile provides a wrapper that makes sure it's built

make test

Alternatively, you can build the library manually first and then run the tests

./script/build-libgit2-static.sh
go test -v

License

M to the I to the T. See the LICENSE file if you've never seen a MIT license before.

Authors

  • Carlos Martín (@carlosmn)
  • Vicent Martí (@vmg)