Java Git
========

An implementation of the Git version control system in pure Java.

This package is licensed under the EDL (Eclipse Distribution
License).

JGit can be imported straight into Eclipse, built and tested from
there, but the automated builds use Maven.

- 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.java7

    Extensions for users of Java 7.

- 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 support

- org.eclipse.jgit.http.server

    Server for the smart and dumb Git HTTP protocol.

- org.eclipse.jgit.pgm

    Command-line interface Git commands implemented using JGit
    ("pgm" stands for program).

- 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.

Tests
-----

- org.eclipse.jgit.junit

    Helpers for unit testing

- org.eclipse.jgit.test

    Unit tests for org.eclipse.jgit

- org.eclipse.jgit.java7.test

    Unit tests for Java 7 specific features

- org.eclipse.jgit.ant.test
- org.eclipse.jgit.pgm.test
- org.eclipse.jgit.http.test
- org.eclipse.jgit.junit.test

    No further description needed

Warnings/Caveats
----------------

- Native smbolic links are supported, but only if you are using Java 7
  or newer and include the org.eclipse.jgit.java7 jar/bundle in the
  classpath, provided the file system supports them. For Windows you
  must have Windows Vista/Windows 2008 or newer, 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 requires at least a Java 7 JDK.

- 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.


Package 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 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.java7/

    * Support for symbolic links.

    * Optimizations for reading file system attributes

- 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:

- gitattributes support


Support
-------

Post question, comments or patches to the jgit-dev@eclipse.org mailing list.
You need to be subscribed to post, see here:

https://dev.eclipse.org/mailman/listinfo/jgit-dev


Contributing
------------

See the EGit Contributor Guide:

http://wiki.eclipse.org/EGit/Contributor_Guide


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/
