Title: The Apache(tm) XML Graphics Project - Code Repositories

#The Apache&trade; XML Graphics Project - Code Repositories

## Web Access to the Repositories { #web-access}

The Apache&trade; XML Graphics project uses Git as version control tool.

You can browse the repositories belonging to the XML Graphics project via the web:


- Apache&trade; Batik: [https://github.com/apache/xmlgraphics-batik](https://github.com/apache/xmlgraphics-batik) (Git repository)

- Apache&trade; FOP: [https://github.com/apache/xmlgraphics-fop](https://github.com/apache/xmlgraphics-fop) (Git repository)

- Apache&trade; XML Graphics Commons: [https://github.com/apache/xmlgraphics-commons](https://github.com/apache/xmlgraphics-commons) (Git repository)

- Apache&trade; XML Graphics Site: [https://gitbox.apache.org/repos/asf/xmlgraphics-website.git](https://gitbox.apache.org/repos/asf/xmlgraphics-website.git) (Git repository)

## Access the Source Tree { #Access-the-Source-Tree}

So, you've decided that you need access to the source tree to see the latest and greatest code. There're two different forms of Git access. The first is `anonymous` and anybody can use it. The second requires that you have a login to the development server. If you don't know what this means, join the mailing list and find out.

### Anonymous (read-only) Git access { #Anonymous-Git-access}

Anyone can checkout source code from our anonymous Git server. To do so, simply use the following commands (if you are using a GUI Git client, configure it appropriately):

**Apache Batik**

  - `git clone https://github.com/apache/xmlgraphics-batik.git`

**Apache FOP**

  - `git clone https://github.com/apache/xmlgraphics-fop.git`

**Apache XML Graphics Commons**

  - `git clone https://github.com/apache/xmlgraphics-commons.git`

**Apache XML Graphics website**

  - `git clone https://gitbox.apache.org/repos/asf/xmlgraphics-website.git`

You can find additional information for setting up Git access on the [Version Control FAQ](https://www.apache.org/dev/version-control.html).
Committers need to replace `http` with `https` and then log in so they can gain write access!