XQuery/Installing eXgit


Git has many features for managing data when many users are changing files around the world. Git has tools for seeing who has changed what data and how to view the differences. These features are not available in eXist (yet). However their is no standard REST interface for git.

Installing eXgitEdit

Note: this is a work in progress. Not done! We hope to have a packinging tool and a simple to install .xar file in the future.

The software for eXgit is stored on github here:


This software depends on the Git Java library here:


You will need to build this project but the ONLY jar you need is:

 org.eclipse.jgit.jar (Note, this is a 1.7MB file)

To build this I downloaded the zip file from github and did "mvn install". I did get errors so I had to do Mavin build with no tests:

  mvn install -Dmaven.test.skip=true

Once you have both the jar files you can put them into $EXIST/lib/user


You can now build the "xar file:

  $ ant

This will put a build/eXgit-0.2.2.xar (about 1.6MB with the two jar files)

You can then load this into your eXist dashboard.

Note, for some reason the jar files are not working. We removed the reference to them in exist.xml and the build file and just manually copied them into the $EXIST_HOME/lib/user area.

Note that now the .xar file is about 2K!

Testing InstallationEdit

You must have a local git checkout.

Use this as your import statement:

import module namespace git="http://exist-db.org/git";

Sample XUnit TestEdit

To test this you can clone any git repository. For example the following will make a copy of the eXide project in /db/exide.

xquery version "1.0";
import module namespace git="http://exist-db.org/git";
git:clone("https://github.com/wolfgangmm/eXide.git", "/db/exide", "", "")

After this test runs you will notice that a .git file has been created in /db/exide/.git with all the git administrative files

Screen image after git repository has been cloned into eXist.

Sample Unit TestEdit

import module namespace git="http://exist-db.org/git";

let $git-checkout-dir := 'd:\ws\exist'

<testcase name="status" classname="http://exist-db.org/git">
   {git:status($git-checkout-dir, '', false())}