diff --git a/scripts/git/migrate-pom.sh b/scripts/git/migrate-pom.sh
new file mode 100755
index 0000000..60d1ca0
--- /dev/null
+++ b/scripts/git/migrate-pom.sh
@@ -0,0 +1,83 @@
+# 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-pom'
+
+# prefixes for modules
+prefixes='maven asf'
+
+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
+
+for prefix in ${prefixes}; do
+    if [[ ${prefix} == maven ]]; then
+        repo_name="maven-parent"
+        artifactId="maven-parent"
+    else
+        repo_name="maven-apache-parent"
+        artifactId="apache"
+    fi
+    echo "Filtering ${prefix} to ${repo_name}..."
+    if [ ! -d ${repo_name}/.git ]; then
+        # create the initial repo
+        git clone --no-hardlinks ${git_src_location} ${repo_name}
+        pushd ${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"
diff --git a/scripts/git/migrate-skins.sh b/scripts/git/migrate-skins.sh
new file mode 100755
index 0000000..834923b
--- /dev/null
+++ b/scripts/git/migrate-skins.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-skins'
+
+# prefixes for modules
+prefixes='maven-default-skin maven-fluido-skin'
+
+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
+
+for prefix in ${prefixes}; do
+    repo_name="${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} ${repo_name}
+        pushd ${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"
