| # Eclipse JGit | |
| An implementation of the Git version control system in pure Java. | |
| ### License | |
| [](https://opensource.org/licenses/BSD-3-Clause) | |
| <br/> | |
| JGit is licensed under the Eclipse Distribution License 1.0 (BSD-3-Clause). | |
| ### Latest Release | |
| [](https://search.maven.org/artifact/org.eclipse.jgit/org.eclipse.jgit) | |
| [](https://javadoc.io/doc/org.eclipse.jgit/org.eclipse.jgit) | |
| [](https://adoptium.net/temurin/releases?version=17&os=any&arch=any) | |
| ### Support | |
| [](https://github.com/eclipse-jgit/jgit/issues) | |
| [](https://github.com/eclipse-jgit/jgit/discussions) | |
| <br/> | |
| Post questions, comments or discussions to the jgit-dev@eclipse.org mailing list. | |
| You need to be [subscribed](https://dev.eclipse.org/mailman/listinfo/jgit-dev) | |
| to post. | |
| ### Contributing | |
| []() | |
| []() | |
| []() | |
| []() | |
| <br/> | |
| See the [JGit and EGit Contributor Guide](http://wiki.eclipse.org/EGit/Contributor_Guide). | |
| ### Build | |
| JGit can be imported straight into Eclipse and built and tested from | |
| there. It can be built from the command line using | |
| [Maven](https://maven.apache.org/) or [Bazel](https://bazel.build/). | |
| The CI builds use Maven and run on [Jenkins](https://ci.eclipse.org/jgit/). | |
| ## Modules | |
| - __org.eclipse.jgit__ | |
| A pure Java library capable of being run standalone, with no | |
| additional support libraries. It provides classes to read and | |
| write a Git repository and operate on a working directory. | |
| All portions of JGit are covered by the EDL. Absolutely no GPL, | |
| LGPL or EPL contributions are accepted within this package. | |
| - __org.eclipse.jgit.ant__ | |
| Ant tasks based on JGit. | |
| - __org.eclipse.jgit.archive__ | |
| Support for exporting to various archive formats (zip etc). | |
| - __org.eclipse.jgit.http.apache__ | |
| [Apache httpclient](https://hc.apache.org/httpcomponents-client-ga/) support. | |
| - __org.eclipse.jgit.http.server__ | |
| Server for the smart and dumb | |
| [Git HTTP protocol](https://github.com/git/git/blob/master/Documentation/technical/http-protocol.txt). | |
| - __org.eclipse.jgit.lfs__ | |
| Support for [LFS](https://git-lfs.github.com/) (Large File Storage). | |
| - __org.eclipse.jgit.lfs.server__ | |
| Basic LFS server support. | |
| - __org.eclipse.jgit.packaging__ | |
| Production of Eclipse features and p2 repository for JGit. See the JGit | |
| Wiki on why and how to use this module. | |
| - __org.eclipse.jgit.pgm__ | |
| Command-line interface Git commands implemented using JGit | |
| ("pgm" stands for program). | |
| - __org.eclipse.jgit.ssh.apache__ | |
| Client support for the SSH protocol based on | |
| [Apache Mina sshd](https://mina.apache.org/sshd-project/). | |
| - __org.eclipse.jgit.ssh.apache.agent__ | |
| Optional support for SSH agents for org.eclipse.jgit.ssh.apache. | |
| - __org.eclipse.jgit.ui__ | |
| Simple UI for displaying git log. | |
| ## Tests | |
| - __org.eclipse.jgit.junit__, __org.eclipse.jgit.junit.http__, | |
| __org.eclipse.jgit.junit.ssh__: Helpers for unit testing | |
| - __org.eclipse.jgit.ant.test__: Unit tests for org.eclipse.jgit.ant | |
| - __org.eclipse.jgit.http.test__: Unit tests for org.eclipse.jgit.http.server | |
| - __org.eclipse.jgit.lfs.server.test__: Unit tests for org.eclipse.jgit.lfs.server | |
| - __org.eclipse.jgit.lfs.test__: Unit tests for org.eclipse.jgit.lfs | |
| - __org.eclipse.jgit.pgm.test__: Unit tests for org.eclipse.jgit.pgm | |
| - __org.eclipse.jgit.ssh.apache.test__: Unit tests for org.eclipse.jgit.ssh.apache | |
| - __org.eclipse.jgit.test__: Unit tests for org.eclipse.jgit | |
| ## SBOM | |
| To enhance supply chain security and offer users clear insight into project components, | |
| Eclipse JGit now generates a Software Bill of Materials (SBOM) for every release. | |
| These are published to the Eclipse Foundation SBOM registry | |
| [Eclipse Foundation SBOM registry](https://sbom.eclipse.org/projects/e315d88f-0474-4a00-a6ed-0b95e62a2acc/collectionprojects), | |
| with access instructions and usage details available in | |
| this [documentation](https://eclipse-csi.github.io/security-handbook/sbom/registry.html). | |
| ## Warnings/Caveats | |
| - Native symbolic links are supported, provided the file system supports | |
| them. For Windows you must use a non-administrator account and have the SeCreateSymbolicLinkPrivilege. | |
| - Only the timestamp of the index is used by JGit if the index is | |
| dirty. | |
| - JGit 6.0 and newer requires at least Java 11. Older versions require at least Java 1.8. | |
| - CRLF conversion is performed depending on the `core.autocrlf` setting, | |
| however Git for Windows by default stores that setting during | |
| installation in the "system wide" configuration file. If Git is not | |
| installed, use the global or repository configuration for the | |
| core.autocrlf setting. | |
| - The system wide configuration file is located relative to where C | |
| Git is installed. Make sure Git can be found via the PATH | |
| environment variable. When installing Git for Windows check the "Run | |
| Git from the Windows Command Prompt" option. There are other options | |
| like Eclipse settings that can be used for pointing out where C Git | |
| is installed. Modifying PATH is the recommended option if C Git is | |
| installed. | |
| - We try to use the same notation of `$HOME` as C Git does. On Windows | |
| this is often not the same value as the `user.home` system property. | |
| ## Features | |
| - __org.eclipse.jgit__ | |
| - Read loose and packed commits, trees, blobs, including | |
| deltafied objects. | |
| - Read objects from shared repositories | |
| - Write loose commits, trees, blobs. | |
| - Write blobs from local files or Java InputStreams. | |
| - Read blobs as Java InputStreams. | |
| - Copy trees to local directory, or local directory to a tree. | |
| - Lazily loads objects as necessary. | |
| - Read and write .git/config files. | |
| - Create a new repository. | |
| - Read and write refs, including walking through symrefs. | |
| - Read, update and write the Git index. | |
| - Checkout in dirty working directory if trivial. | |
| - Walk the history from a given set of commits looking for commits | |
| introducing changes in files under a specified path. | |
| - Object transport | |
| Fetch via ssh, git, http, Amazon S3 and bundles. | |
| Push via ssh, git, http, and Amazon S3. JGit does not yet deltify | |
| the pushed packs so they may be a lot larger than C Git packs. | |
| - Garbage collection | |
| - Merge | |
| - Rebase | |
| - And much more | |
| - __org.eclipse.jgit.pgm__ | |
| - Assorted set of command line utilities. Mostly for ad-hoc testing of jgit | |
| log, glog, fetch etc. | |
| - __org.eclipse.jgit.ant__ | |
| - Ant tasks | |
| - __org.eclipse.jgit.archive__ | |
| - Support for Zip/Tar and other formats | |
| - __org.eclipse.http__ | |
| - HTTP client and server support | |
| ## Missing Features | |
| There are some missing features: | |
| - signing push | |
| - shallow and partial cloning | |
| - support for remote helpers | |
| - support for credential helpers | |
| - support for multiple working trees (git-worktree) | |
| - using external diff tools | |
| - support for HTTPS client certificates | |
| - SHA-256 object IDs | |
| - git protocol V2 (client side): packfile-uris | |
| - multi-pack index | |
| - split index | |
| ## About Git | |
| More information about Git, its repository format, and the canonical | |
| C based implementation can be obtained from the | |
| [Git website](http://git-scm.com/). |