# Manual Developer Setup

## Obtaining Sources

EGit and JGit are self hosted in Git. You can browse the repositories on the web: EGit, JGit

The first section below describes how to clone a repository and can be skipped if you have done this before. The next section lists the repositories and their URLs.

### Cloning

#### On the command line

    git clone <enter URL>

After that, import the projects into Eclipse using Import > Existing Projects into Workspace.

#### Using EGit (see download page)

First, verify that the default repository folder as set on the main Git preference page is to your liking.

Then, clone the repository and import the projects:

- Open File > Import... and select Git > Projects from Git
- Selet URI
- Enter the URL (see next section)
- Import existing projects into the workspace from the newly created working directory

### Repositories

To develop EGit, the EGit and JGit repositories are needed, the others are optional. To develop JGit, only JGit is needed.

#### EGit

URL: https://git.eclipse.org/r/egit/egit.git

This is the main repository, where the standard EGit feature is developed. It contains the code for the UI and Eclipse integration.

#### JGit

URL: https://git.eclipse.org/r/jgit/jgit.git

This is the Java implementation of Git used by EGit, for working with Git repositories.

#### EGit GitHub Integration

URL: https://git.eclipse.org/r/egit/egit-github.git

Moved to Mylyn: EGit also provided tools for integrating with GitHub and Mylyn tasks. They were moved to Mylyn in Eclipse 2023-06, see mylyn.egit.

## Development IDE Configuration

Download and install the Eclipse package "Eclipse IDE for Eclipse Committers" or "Eclipse for RCP and RAP Developers" from here, if you don't already have it:

https://www.eclipse.org/downloads/packages/

### Tools

To install all the necessary tools to work on EGit/JGit, there is a egit-developer-tools.p2f file which you can use as follows:

- File > Import > Install > Install Software Items from File
- Browse...
  - Go to the location of your egit repository, open the tools directory and select egit-developer-tools.p2f
  - Alternatively, if you only want to contribute to JGit, download the file from the above link and select it
- All the items you don't already have should be selected automatically
- Finish the wizard
- Restart

### Java Requirements

Since 6.0 EGit and JGit have Java 11 and Eclipse Platform 4.17 (2020-09) as minimum requirements, so dependencies to newer Java and platform versions must be avoided.

We are using API Tools Environment Descriptions (see changes for JGit and EGit) to facilitate detecting code which isn't working on Java 11. If you followed the instructions in the Tools section above, the necessary descriptions should already be installed. Otherwise install API Tools Environment Descriptions from the release train repository, see Installing Execution Environment Descriptions.

### Dependencies

After importing the EGit and JGit projects in Eclipse, they will not compile due to missing dependencies. Set a Target Platform to fix this

- Open the org.eclipse.egit.target project
- Choose the egit-<version>.target file matching the version of your Eclipse platform (e.g. 4.21 for 2021-09) and open it (this may take a while as it downloads the indexes of the p2 repositories the target platform refers to)
- In the resulting editor, click on the Set as Target Platform link at the top right (this may also take a while since it downloads the dependencies)

After that, the workspace should build cleanly. If not, try Project > Clean... > All. If this also doesn't help open Preferences > Plug-In Development > Target Platform, select the checked target platform and click "Reload..." this will flush PDE's bundle cache and re-download the artifacts listed in the target platform.

There are different target definitions, one for each version of Eclipse that EGit supports. The one you select will be the one that is started if you want to try out a feature or bug fix.

You can always switch between them to test on different Eclipse versions. E.g. when you are developing some major UI functionality, you should try it with the oldest supported Eclipse release to make sure it doesn't depend on API that is only available in later versions.