diff --git a/scripts/git/migrate-doxia-tools.sh b/scripts/git/migrate-doxia-tools.sh
new file mode 100755
index 0000000..99a574d
--- /dev/null
+++ b/scripts/git/migrate-doxia-tools.sh
@@ -0,0 +1,78 @@
+# 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.
+
+# This script is used to migrate modules from SVN to Git,
+# or more precisely to split a svn2git repo to a module repo
+#!/bin/sh -e
+
+# svn2git repo to be split
+svn2git_repo='maven-doxia-tools'
+
+git_src_location="svn2git/${svn2git_repo}"
+
+if [ ! -d ${git_src_location} ]; then
+    # clone svn2git repo
+    echo "Cloning source git-svn ${svn2git_repo} ..."
+    git clone https://github.com/apache/${svn2git_repo}.git ${git_src_location}
+    #  ensure we don't accidentally overwrite the source repository
+    chmod ugo-w ${git_src_location}
+    echo "Done!"
+fi
+
+mkdir doxia-tools
+
+for d in ${git_src_location}/doxia-*; do
+    prefix=`filename $d`
+    repo_name="maven-${prefix}"
+    artifactId="${prefix}"
+    echo "Filtering ${prefix} to ${repo_name}..."
+    if [ ! -d ${repo_name}/.git ]; then
+        # create the initial repo
+        git clone --no-hardlinks ${git_src_location} doxia-tools/${repo_name}
+        pushd doxia-tools/${repo_name}
+
+        # make sure we don't push to the incorrect repo and also remove make sure
+        # we don't keep references to the remote repo
+        git remote rm origin
+
+        # rename trunk to master
+        git branch -m trunk master
+
+        # Remove everything except the path belonging to the module
+        git filter-branch --subdirectory-filter ${prefix}/
+
+        # remove unrelated tags
+        for tag in $(git tag); do
+            if [[ $tag != ${artifactId}* ]]; then
+                git tag -d ${tag} > /dev/null
+            fi
+        done
+
+        # cleanup and compaction
+        git for-each-ref --format="%(refname)" refs/original/ | xargs -n1 git update-ref -d
+        git reflog expire --expire=now --all
+        git repack -Ad
+        git gc --aggressive --prune=now
+
+        git remote add origin https://gitbox.apache.org/repos/asf/${repo_name}.git
+
+        popd
+        echo "Complete!"
+    else
+        echo "Already converted"
+    fi
+done
+
+echo "Launch 'git push --set-upstream origin master' once ready"
