]>
Commit | Line | Data |
---|---|---|
4b7483a2 | 1 | libgit2 - the Git linkable library |
c5b97d5a | 2 | ====================== |
4b7483a2 | 3 | |
37029314 PD |
4 | [![Build Status](https://secure.travis-ci.org/libgit2/libgit2.png?branch=development)](http://travis-ci.org/libgit2/libgit2) |
5 | ||
4b7483a2 SC |
6 | libgit2 is a portable, pure C implementation of the Git core methods provided as a |
7 | re-entrant linkable library with a solid API, allowing you to write native | |
8 | speed custom Git applications in any language with bindings. | |
9 | ||
b760fbf5 VM |
10 | libgit2 is licensed under a **very permissive license** (GPLv2 with a special Linking Exception). |
11 | This basically means that you can link it (unmodified) with any kind of software without having to | |
12 | release its source code. | |
13 | ||
14 | * Mailing list: <libgit2@librelist.org> | |
b8d08292 | 15 | * Archives: <http://librelist.com/browser/libgit2/> |
e0d9e12e | 16 | * Website: <http://libgit2.github.com> |
e49020e0 | 17 | * API documentation: <http://libgit2.github.com/libgit2> |
e0d9e12e | 18 | * Usage guide: <http://libgit2.github.com/api.html> |
4b7483a2 SC |
19 | |
20 | What It Can Do | |
21 | ================================== | |
22 | ||
23 | libgit2 is already very usable. | |
c5b97d5a | 24 | |
b760fbf5 | 25 | * SHA conversions, formatting and shortening |
5689a8d5 | 26 | * abstracted ODB backend system |
7548b8af | 27 | * commit, tag, tree and blob parsing, editing, and write-back |
4b7483a2 | 28 | * tree traversal |
b760fbf5 VM |
29 | * revision walking |
30 | * index file (staging area) manipulation | |
b760fbf5 | 31 | * reference management (including packed references) |
7548b8af VM |
32 | * config file management |
33 | * high level repository management | |
34 | * thread safety and reentrancy | |
35 | * descriptive and detailed error messages | |
36 | * ...and more (over 175 different API calls) | |
b760fbf5 | 37 | |
7548b8af VM |
38 | Building libgit2 - Using CMake |
39 | ============================== | |
ec821ca6 | 40 | |
bbcc7ffc | 41 | libgit2 builds cleanly on most platforms without any external dependencies. |
a07d8994 | 42 | Under Unix-like systems, like Linux, \*BSD and Mac OS X, libgit2 expects `pthreads` to be available; |
bbcc7ffc VM |
43 | they should be installed by default on all systems. Under Windows, libgit2 uses the native Windows API |
44 | for threading. | |
45 | ||
7548b8af | 46 | The libgit2 library is built using CMake 2.6+ (<http://www.cmake.org>) on all platforms. |
4b7483a2 | 47 | |
e0d9e12e | 48 | On most systems you can build the library using the following commands |
4b7483a2 | 49 | |
e0d9e12e VM |
50 | $ mkdir build && cd build |
51 | $ cmake .. | |
52 | $ cmake --build . | |
c5b97d5a | 53 | |
e0d9e12e VM |
54 | Alternatively you can point the CMake GUI tool to the CMakeLists.txt file and generate platform specific build project or IDE workspace. |
55 | ||
56 | To install the library you can specify the install prefix by setting: | |
4b7483a2 | 57 | |
e0d9e12e VM |
58 | $ cmake .. -DCMAKE_INSTALL_PREFIX=/install/prefix |
59 | $ cmake --build . --target install | |
4b7483a2 | 60 | |
5cb7a1ad CMN |
61 | If you want to build a universal binary for Mac OS X, CMake sets it |
62 | all up for you if you use `-DCMAKE_OSX_ARCHITECTURES="i386;x86_64"` | |
63 | when configuring. | |
64 | ||
e0d9e12e | 65 | For more advanced use or questions about CMake please read <http://www.cmake.org/Wiki/CMake_FAQ>. |
c5b97d5a | 66 | |
7548b8af VM |
67 | The following CMake variables are declared: |
68 | ||
9795a40f | 69 | - `BIN_INSTALL_DIR`: Where to install binaries to. |
77ace82d | 70 | - `LIB_INSTALL_DIR`: Where to install libraries to. |
9795a40f | 71 | - `INCLUDE_INSTALL_DIR`: Where to install headers to. |
f0890fcc | 72 | - `BUILD_SHARED_LIBS`: Build libgit2 as a Shared Library (defaults to ON) |
221ee54b | 73 | - `BUILD_CLAR`: Build [Clar](https://github.com/vmg/clar)-based test suite (defaults to ON) |
7548b8af | 74 | - `THREADSAFE`: Build libgit2 with threading support (defaults to OFF) |
c5b97d5a | 75 | |
e0d9e12e VM |
76 | Language Bindings |
77 | ================================== | |
4b7483a2 | 78 | |
e0d9e12e | 79 | Here are the bindings to libgit2 that are currently available: |
4b7483a2 | 80 | |
b8d08292 AL |
81 | * C++ |
82 | * libqgit2, Qt bindings <https://projects.kde.org/projects/playground/libs/libqgit2/> | |
0e8144fe EH |
83 | * Chicken Scheme |
84 | * chicken-git <https://wiki.call-cc.org/egg/git> | |
26127ea7 AM |
85 | * D |
86 | * dlibgit <https://github.com/AndrejMitrovic/dlibgit> | |
b8d08292 AL |
87 | * Delphi |
88 | * GitForDelphi <https://github.com/libgit2/GitForDelphi> | |
89 | * Erlang | |
90 | * Geef <https://github.com/schacon/geef> | |
91 | * Go | |
92 | * go-git <https://github.com/str1ngs/go-git> | |
93 | * GObject | |
a7a2fccd | 94 | * libgit2-glib <https://live.gnome.org/Libgit2-glib> |
b8d08292 AL |
95 | * Haskell |
96 | * hgit2 <https://github.com/norm2782/hgit2> | |
97 | * Lua | |
98 | * luagit2 <https://github.com/libgit2/luagit2> | |
99 | * .NET | |
100 | * libgit2net, low level bindings <https://github.com/txdv/libgit2net> | |
101 | * libgit2sharp <https://github.com/libgit2/libgit2sharp> | |
102 | * Node.js | |
103 | * node-gitteh <https://github.com/libgit2/node-gitteh> | |
104 | * nodegit <https://github.com/tbranyen/nodegit> | |
105 | * Objective-C | |
106 | * objective-git <https://github.com/libgit2/objective-git> | |
107 | * OCaml | |
108 | * libgit2-ocaml <https://github.com/burdges/libgit2-ocaml> | |
109 | * Parrot Virtual Machine | |
110 | * parrot-libgit2 <https://github.com/letolabs/parrot-libgit2> | |
111 | * Perl | |
112 | * git-xs-pm <https://github.com/ingydotnet/git-xs-pm> | |
113 | * PHP | |
114 | * php-git <https://github.com/libgit2/php-git> | |
115 | * Python | |
116 | * pygit2 <https://github.com/libgit2/pygit2> | |
117 | * Ruby | |
118 | * Rugged <https://github.com/libgit2/rugged> | |
119 | * Vala | |
120 | * libgit2.vapi <https://github.com/apmasell/vapis/blob/master/libgit2.vapi> | |
4b7483a2 SC |
121 | |
122 | If you start another language binding to libgit2, please let us know so | |
123 | we can add it to the list. | |
124 | ||
b8d08292 | 125 | How Can I Contribute? |
c5b97d5a SC |
126 | ================================== |
127 | ||
128 | Fork libgit2/libgit2 on GitHub, add your improvement, push it to a branch | |
0f4d78d2 | 129 | in your fork named for the topic, send a pull request. If you change the |
88bfe790 | 130 | API or make other large changes, make a note of it in docs/rel-notes/ in a |
0f4d78d2 | 131 | file named after the next release. |
c5b97d5a SC |
132 | |
133 | You can also file bugs or feature requests under the libgit2 project on | |
134 | GitHub, or join us on the mailing list by sending an email to: | |
135 | ||
136 | libgit2@librelist.com | |
137 | ||
138 | ||
932d1baf | 139 | License |
4b7483a2 | 140 | ================================== |
e0d9e12e | 141 | libgit2 is under GPL2 **with linking exemption**. This means you |
4b7483a2 SC |
142 | can link to the library with any program, commercial, open source or |
143 | other. However, you cannot modify libgit2 and distribute it without | |
144 | supplying the source. | |
145 | ||
146 | See the COPYING file for the full license text. |