]> git.proxmox.com Git - libgit2.git/blame - README.md
Merge pull request #3818 from meatcoder/fix_odb_read_error
[libgit2.git] / README.md
CommitLineData
4b7483a2 1libgit2 - the Git linkable library
20b5d300 2==================================
4b7483a2 3
c5c8ece1 4[![Travis Build Status](https://secure.travis-ci.org/libgit2/libgit2.svg?branch=master)](http://travis-ci.org/libgit2/libgit2)
7cfbf3b7 5[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/xvof5b4t5480a2q3/branch/master?svg=true)](https://ci.appveyor.com/project/libgit2/libgit2/branch/master)
4caf0df0 6[![Coverity Scan Build Status](https://scan.coverity.com/projects/639/badge.svg)](https://scan.coverity.com/projects/639)
37029314 7
486bc366
RB
8`libgit2` is a portable, pure C implementation of the Git core methods
9provided as a re-entrant linkable library with a solid API, allowing you to
10write native speed custom Git applications in any language with bindings.
4b7483a2 11
dcfdb977
BS
12`libgit2` is licensed under a **very permissive license** (GPLv2 with a special
13Linking Exception). This basically means that you can link it (unmodified)
14with any kind of software without having to release its source code.
15Additionally, the example code has been released to the public domain (see the
16[separate license](examples/COPYING) for more information).
b760fbf5 17
20b5d300 18* Website: [libgit2.github.com](http://libgit2.github.com)
3e3d332b 19* StackOverflow Tag: [libgit2](http://stackoverflow.com/questions/tagged/libgit2)
20b5d300 20* Issues: [GitHub Issues](https://github.com/libgit2/libgit2/issues) (Right here!)
1181ca0c 21* API documentation: <http://libgit2.github.com/libgit2/>
20b5d300 22* IRC: [#libgit2](irc://irc.freenode.net/libgit2) on irc.freenode.net.
3e3d332b 23* Mailing list: The libgit2 mailing list was
68a19ca9 24 traditionally hosted in Librelist but has been deprecated. We encourage you to
41a93cc6 25 [use StackOverflow](http://stackoverflow.com/questions/tagged/libgit2) instead for any questions regarding
68a19ca9
RB
26 the library, or [open an issue](https://github.com/libgit2/libgit2/issues)
27 on GitHub for bug reports. The mailing list archives are still available at
3e3d332b
MW
28 <http://librelist.com/browser/libgit2/>.
29
4b7483a2
SC
30
31What It Can Do
20b5d300 32==============
4b7483a2 33
486bc366
RB
34`libgit2` is already very usable and is being used in production for many
35applications including the GitHub.com site, in Plastic SCM and also powering
36Microsoft's Visual Studio tools for Git. The library provides:
c5b97d5a 37
b760fbf5 38* SHA conversions, formatting and shortening
5689a8d5 39* abstracted ODB backend system
7548b8af 40* commit, tag, tree and blob parsing, editing, and write-back
4b7483a2 41* tree traversal
b760fbf5
VM
42* revision walking
43* index file (staging area) manipulation
b760fbf5 44* reference management (including packed references)
7548b8af
VM
45* config file management
46* high level repository management
47* thread safety and reentrancy
48* descriptive and detailed error messages
49* ...and more (over 175 different API calls)
b760fbf5 50
2baee9f8
CMN
51Optional dependencies
52=====================
53
54While the library provides git functionality without the need for
55dependencies, it can make use of a few libraries to add to it:
56
57- pthreads (non-Windows) to enable threadsafe access as well as multi-threaded pack generation
58- OpenSSL (non-Windows) to talk over HTTPS and provide the SHA-1 functions
2c22193b 59- LibSSH2 to enable the SSH transport
2baee9f8
CMN
60- iconv (OSX) to handle the HFS+ path encoding peculiarities
61
ed09e044
CMN
62Initialization
63===============
64
65The library needs to keep track of some global state. Call
66
67 git_libgit2_init();
68
69before calling any other libgit2 functions. You can call this function many times. A matching number of calls to
70
71 git_libgit2_shutdown();
72
ecf1c3c3
ET
73will free the resources. Note that if you have worker threads, you should
74call `git_libgit2_shutdown` *after* those threads have exited. If you
75require assistance coordinating this, simply have the worker threads call
76`git_libgit2_init` at startup and `git_libgit2_shutdown` at shutdown.
ed09e044 77
15bea02c
CMN
78Threading
79=========
80
81See [THREADING](THREADING.md) for information
82
1f8cb02f
CMN
83Conventions
84===========
85
86See [CONVENTIONS](CONVENTIONS.md) for an overview of the external
87and internal API/coding conventions we use.
88
7548b8af
VM
89Building libgit2 - Using CMake
90==============================
ec821ca6 91
20b5d300 92`libgit2` builds cleanly on most platforms without any external dependencies.
a07d8994 93Under Unix-like systems, like Linux, \*BSD and Mac OS X, libgit2 expects `pthreads` to be available;
bbcc7ffc
VM
94they should be installed by default on all systems. Under Windows, libgit2 uses the native Windows API
95for threading.
96
1181ca0c 97The `libgit2` library is built using [CMake](<https://cmake.org/>) (version 2.8 or newer) on all platforms.
4b7483a2 98
e0d9e12e 99On most systems you can build the library using the following commands
4b7483a2 100
e0d9e12e
VM
101 $ mkdir build && cd build
102 $ cmake ..
103 $ cmake --build .
c5b97d5a 104
e0d9e12e
VM
105Alternatively you can point the CMake GUI tool to the CMakeLists.txt file and generate platform specific build project or IDE workspace.
106
107To install the library you can specify the install prefix by setting:
4b7483a2 108
e0d9e12e
VM
109 $ cmake .. -DCMAKE_INSTALL_PREFIX=/install/prefix
110 $ cmake --build . --target install
4b7483a2 111
1181ca0c 112For more advanced use or questions about CMake please read <https://cmake.org/Wiki/CMake_FAQ>.
c5b97d5a 113
7548b8af
VM
114The following CMake variables are declared:
115
9795a40f 116- `BIN_INSTALL_DIR`: Where to install binaries to.
77ace82d 117- `LIB_INSTALL_DIR`: Where to install libraries to.
9795a40f 118- `INCLUDE_INSTALL_DIR`: Where to install headers to.
f0890fcc 119- `BUILD_SHARED_LIBS`: Build libgit2 as a Shared Library (defaults to ON)
221ee54b 120- `BUILD_CLAR`: Build [Clar](https://github.com/vmg/clar)-based test suite (defaults to ON)
79b0ae4e 121- `THREADSAFE`: Build libgit2 with threading support (defaults to ON)
66bf4dbc
CMN
122- `STDCALL`: Build libgit2 as `stdcall`. Turn off for `cdecl` (Windows; defaults to ON)
123
124Compiler and linker options
125---------------------------
126
127CMake lets you specify a few variables to control the behavior of the
128compiler and linker. These flags are rarely used but can be useful for
12964-bit to 32-bit cross-compilation.
130
131- `CMAKE_C_FLAGS`: Set your own compiler flags
132- `CMAKE_FIND_ROOT_PATH`: Override the search path for libraries
133- `ZLIB_LIBRARY`, `OPENSSL_SSL_LIBRARY` AND `OPENSSL_CRYPTO_LIBRARY`:
134Tell CMake where to find those specific libraries
135
136MacOS X
137-------
138
139If you want to build a universal binary for Mac OS X, CMake sets it
140all up for you if you use `-DCMAKE_OSX_ARCHITECTURES="i386;x86_64"`
141when configuring.
142
143Windows
144-------
145
146You need to run the CMake commands from the Visual Studio command
147prompt, not the regular or Windows SDK one. Select the right generator
148for your version with the `-G "Visual Studio X" option.
149
1181ca0c 150See [the website](http://libgit2.github.com/docs/guides/build-and-link/)
66bf4dbc 151for more detailed instructions.
c5b97d5a 152
01cd5ae3
KA
153Android
154-------
155
156Extract toolchain from NDK using, `make-standalone-toolchain.sh` script.
63d1fad4
NK
157Optionally, crosscompile and install OpenSSL inside of it. Then create CMake
158toolchain file that configures paths to your crosscompiler (substitute `{PATH}`
01cd5ae3
KA
159with full path to the toolchain):
160
161 SET(CMAKE_SYSTEM_NAME Linux)
162 SET(CMAKE_SYSTEM_VERSION Android)
775d831b 163
01cd5ae3
KA
164 SET(CMAKE_C_COMPILER {PATH}/bin/arm-linux-androideabi-gcc)
165 SET(CMAKE_CXX_COMPILER {PATH}/bin/arm-linux-androideabi-g++)
166 SET(CMAKE_FIND_ROOT_PATH {PATH}/sysroot/)
775d831b 167
01cd5ae3
KA
168 SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
169 SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
170 SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
171
57aa839c 172Add `-DCMAKE_TOOLCHAIN_FILE={pathToToolchainFile}` to cmake command
01cd5ae3
KA
173when configuring.
174
e0d9e12e
VM
175Language Bindings
176==================================
4b7483a2 177
e0d9e12e 178Here are the bindings to libgit2 that are currently available:
4b7483a2 179
b8d08292
AL
180* C++
181 * libqgit2, Qt bindings <https://projects.kde.org/projects/playground/libs/libqgit2/>
0e8144fe
EH
182* Chicken Scheme
183 * chicken-git <https://wiki.call-cc.org/egg/git>
26127ea7 184* D
e702dc2e 185 * dlibgit <https://github.com/s-ludwig/dlibgit>
b8d08292
AL
186* Delphi
187 * GitForDelphi <https://github.com/libgit2/GitForDelphi>
188* Erlang
a402179a 189 * Geef <https://github.com/carlosmn/geef>
b8d08292 190* Go
f2cda906 191 * git2go <https://github.com/libgit2/git2go>
b8d08292 192* GObject
1ce509fe 193 * libgit2-glib <https://wiki.gnome.org/Projects/Libgit2-glib>
b8d08292 194* Haskell
1181ca0c 195 * hgit2 <https://github.com/jwiegley/gitlib>
4ef9a508
ET
196* Java
197 * Jagged <https://github.com/ethomson/jagged>
d747ec18 198* Julia
199 * LibGit2.jl <https://github.com/jakebolewski/LibGit2.jl>
b8d08292
AL
200* Lua
201 * luagit2 <https://github.com/libgit2/luagit2>
202* .NET
b8d08292
AL
203 * libgit2sharp <https://github.com/libgit2/libgit2sharp>
204* Node.js
205 * node-gitteh <https://github.com/libgit2/node-gitteh>
1181ca0c 206 * nodegit <https://github.com/nodegit/nodegit>
b8d08292
AL
207* Objective-C
208 * objective-git <https://github.com/libgit2/objective-git>
209* OCaml
69560cc0 210 * ocaml-libgit2 <https://github.com/fxfactorial/ocaml-libgit2>
b8d08292
AL
211* Parrot Virtual Machine
212 * parrot-libgit2 <https://github.com/letolabs/parrot-libgit2>
213* Perl
2ef20da0 214 * Git-Raw <https://github.com/jacquesg/p5-Git-Raw>
b8d08292
AL
215* PHP
216 * php-git <https://github.com/libgit2/php-git>
4ef9a508
ET
217* PowerShell
218 * GitPowerShell <https://github.com/ethomson/gitpowershell>
b8d08292
AL
219* Python
220 * pygit2 <https://github.com/libgit2/pygit2>
562516ec
SW
221* R
222 * git2r <https://github.com/ropensci/git2r>
b8d08292
AL
223* Ruby
224 * Rugged <https://github.com/libgit2/rugged>
b4913705
AC
225* Rust
226 * git2-rs <https://github.com/alexcrichton/git2-rs>
35425b51
BG
227* Swift
228 * Gift <https://github.com/modocache/Gift>
b8d08292
AL
229* Vala
230 * libgit2.vapi <https://github.com/apmasell/vapis/blob/master/libgit2.vapi>
4b7483a2
SC
231
232If you start another language binding to libgit2, please let us know so
233we can add it to the list.
234
b8d08292 235How Can I Contribute?
c5b97d5a
SC
236==================================
237
486bc366 238Check the [contribution guidelines](CONTRIBUTING.md) to understand our
22829b74 239workflow, the libgit2 [coding conventions](CONVENTIONS.md), and our list of
486bc366 240[good starting projects](PROJECTS.md).
c5b97d5a 241
932d1baf 242License
4b7483a2 243==================================
486bc366 244
18925129 245`libgit2` is under GPL2 **with linking exception**. This means you can link to
486bc366
RB
246and use the library from any program, proprietary or open source; paid or
247gratis. However, you cannot modify libgit2 and distribute it without
4b7483a2
SC
248supplying the source.
249
486bc366 250See the [COPYING file](COPYING) for the full license text.