<?xml version="1.0" encoding="UTF-8"?>

<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<document xmlns="http://maven.apache.org/XDOC/2.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
  <properties>
    <title>Source Repository</title>
  </properties>
  <body>
    <section name="Source Repository">
      <p>
        Maven Doxia projects use <a href="http://git-scm.com/">Git</a> or <a href="http://subversion.apache.org/">Subversion</a> to manage their source code:
        decisions to stay with Subversion or move to Git are tracked on <a href="https://cwiki.apache.org/confluence/display/MAVEN/Git+Migration">Maven's Wiki</a>.
      </p>
      <p>
        Instructions on Subversion use can be found in the online book <a href="http://svnbook.red-bean.com/">Version Control with Subversion</a>.
        Instructions on Git use can be found in the online book <a href="http://git-scm.com/book/">Pro Git</a>.
        Instructions for using the Apache Software Foundation Git repositories are at <a href="https://git-wip-us.apache.org/">https://git-wip-us.apache.org</a>.
      </p>

      <subsection name="Doxia Website">
      <p>The sources for this site are available in a separate Git repository:
        <table>
          <tr>
            <td><a href="/doxia/">Apache Maven Doxia website</a></td>
            <td><source><a href="https://gitbox.apache.org/repos/asf/maven-doxia-site.git">https://gitbox.apache.org/repos/asf/maven-doxia-site.git</a></source></td>
            <td><a href="https://github.com/apache/maven-doxia-site/">(GitHub mirror)</a></td>
          </tr>
        </table>
      </p>
      </subsection>

      <subsection name="Components in Git">
      <p>
        The components in Git are:
        <table>
          <tr>
            <td><a href="doxia/">Apache Maven Doxia base</a></td>
            <td><source><a href="https://gitbox.apache.org/repos/asf/maven-doxia.git">https://gitbox.apache.org/repos/asf/maven-doxia.git</a></source></td>
            <td><a href="https://github.com/apache/maven-doxia/">(GitHub mirror)</a></td>
          </tr>
          <tr>
            <td><a href="doxia-sitetools/">Apache Maven Doxia Sitetools</a></td>
            <td><source><a href="https://gitbox.apache.org/repos/asf/maven-doxia-sitetools.git">https://gitbox.apache.org/repos/asf/maven-doxia-sitetools.git</a></source></td>
            <td><a href="https://github.com/apache/maven-doxia-sitetools/">(GitHub mirror)</a></td>
          </tr>
          <tr>
            <th>Doxia Tools</th>
          </tr>
          <tr>
            <td><a href="doxia-tools/doxia-converter/">Apache Maven Doxia Converter</a></td>
            <td><source><a href="https://gitbox.apache.org/repos/asf/maven-doxia-converter.git">https://gitbox.apache.org/repos/asf/maven-doxia-converter.git</a></source></td>
            <td><a href="https://github.com/apache/maven-doxia-converter/">(GitHub mirror)</a></td>
          </tr>
          <tr>
            <td><a href="doxia-tools/doxia-linkcheck/">Apache Maven Doxia LinkCheck</a></td>
            <td><source><a href="https://gitbox.apache.org/repos/asf/maven-doxia-linkcheck.git">https://gitbox.apache.org/repos/asf/maven-doxia-linkcheck.git</a></source></td>
            <td><a href="https://github.com/apache/maven-doxia-linkcheck/">(GitHub mirror)</a></td>
          </tr>
        </table>
      </p>
      </subsection>
    </section>
  </body>
</document>
