Git to Go; bindings for libgit2. Like McDonald's but tastier.
Go to file
Carlos Martín Nieto 5001942b59 Allow building statically via the "static" build tag 2017-04-14 12:36:42 +02:00
script Get rid of the with-static.sh script 2016-11-01 00:17:51 +01:00
vendor Update libgit2 to df4dfaad 2017-01-20 13:20:30 +00:00
.gitmodules Remove left-over submodule configuration 2014-06-07 19:29:45 +02:00
.travis.yml Merge remote-tracking branch 'origin/next' 2017-01-20 00:46:34 +00:00
LICENSE Initial commit 2013-03-05 20:53:04 +01:00
Makefile Allow building statically via the "static" build tag 2017-04-14 12:36:42 +02:00
README.md Update the description of the branches in README. 2017-01-20 13:48:39 +00: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 Add check for ErrIterOver in BranchIterator.ForEach 2016-09-05 15:56:09 +01:00
branch_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
checkout.go Removed Useless Argument Check 2016-08-28 11:21:10 +02: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 Clone Fix 2016-07-24 14:20:12 +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 Add NewCredSshKeyFromMemory to the credentials helpers. 2016-06-22 14:50:29 -07:00
describe.go Move from an Object interface to a type 2015-08-04 14:47:10 +02:00
describe_test.go Update libgit2 to df4dfaad 2017-01-20 13:20:30 +00: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 Allow building statically via the "static" build tag 2017-04-14 12:36:42 +02:00
git_dynamic.go Allow building statically via the "static" build tag 2017-04-14 12:36:42 +02:00
git_static.go Allow building statically via the "static" build tag 2017-04-14 12:36:42 +02:00
git_test.go Write the index before writing the index tree in seedTestRepo test helper func 2016-09-16 21:49:54 -07: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 Implement git_index_remove_directory in index wrapper 2016-10-20 15:49:24 +11:00
index_test.go Merge pull request #351 from ezwiebel/index-remove-directory 2016-10-31 20:03:05 +01: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 Merge remote-tracking branch 'origin/next' 2017-01-20 00:46:34 +00: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 Fix memory leak in Patch.String() 2017-03-23 12:16:43 -07: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
rebase.go LockOSThread in CurrentOperationIndex for git error creation 2016-11-23 17:10:59 +11:00
rebase_test.go LockOSThread in CurrentOperationIndex for git error creation 2016-11-23 17:10:59 +11:00
refdb.go odb & refdb: make New*BackendFromC take unsafe.Pointer as argument allowing argument to be set from different package 2016-09-30 23:00:20 +09: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 Merge remote-tracking branch 'origin/next' 2017-01-20 00:46:34 +00:00
remote_test.go Merge remote-tracking branch 'upstream/master' into next 2016-08-27 21:07:44 +02:00
repository.go Add new repository open flags 2017-03-07 23:23:24 -05: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 Merge pull request #365 from AaronO/fix/memleak-tree-entrybyname 2017-04-13 21:16:30 +02:00
tree_test.go Run the tests in parallel 2016-08-27 19:21:05 +02:00
walk.go Removes redundant iteration over check. 2016-08-29 09:10:56 -04:00
wrapper.c Merge remote-tracking branch 'origin/next' 2017-01-20 00:46:34 +00:00

README.md

git2go

GoDoc Build Status

Go bindings for libgit2.

Which branch to use

The numbered branches work against the version of libgit2 as specified by their number. You can import them in your project via gopkg.in, e.g. if you have libgit2 v0.25 installed you'd import with

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

which will ensure there are no sudden changes to the API.

The master branch follows the tip of libgit2 itself (with some lag) and as such has no guarantees on its own API nor does it have expectations the stability of libgit2's. Thus this only supports statically linking against libgit2.

Installing

This project wraps the functionality provided by libgit2. It thus needs it in order to perform the work.

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

Versioned branch, dynamic linking

When linking dynamically against a released version of libgit2, install it via your system's package manager. CGo will take care of finding its pkg-config file and set up the linking. Import via gopkg.in, e.g. to work against libgit2 v0.25

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

Master branch, or static linking

If using master or building a branch statically, we need to build libgit2 first. In order to build it, you need cmake, pkg-config and a C compiler. You will also need the development packages for OpenSSL (outside of Windows or macOS) and LibSSH2 installed if you want libgit2 to support HTTPS and SSH respectively. Note that even if libgit2 is included in the resulting binary, its dependencies will not be.

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 submodule update --init # get libgit2
make install

will compile libgit2, link it into git2go and install it.

Parallelism and network operations

libgit2 may use 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)