From 96c6ddd559a6c1f3054b2f584e3f4e8314af5c51 Mon Sep 17 00:00:00 2001 From: Emmanuel Stapf Date: Fri, 7 Nov 2014 21:16:31 +0000 Subject: [PATCH] Added gitsvn.sh script to build a mirror of the subversion repository on github. git-svn-id: https://svn.eiffel.com/eiffelstudio/trunk@96066 8089f293-4706-0410-a29e-feb5c42a2edf --- gitsvn.sh | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100755 gitsvn.sh diff --git a/gitsvn.sh b/gitsvn.sh new file mode 100755 index 00000000000..de7ea1bc564 --- /dev/null +++ b/gitsvn.sh @@ -0,0 +1,64 @@ +#!/bin/bash + +set -x + +PROJECT_ROOT=/home/svn/EiffelStudio.git +SVN_REPO=https://svn.eiffel.com/eiffelstudio/trunk +GIT_REPO=git@github.com:EiffelSoftware/EiffelStudio.git +SVN_LAYOUT="--trunk=." + +SVN_CLONE="${PROJECT_ROOT}/svn-clone" +GIT_BARE="${PROJECT_ROOT}/git-bare-tmp" + +if [ ! -d "${PROJECT_ROOT}" ]; then + echo Directory "${PROJECT_ROOT}" does not exist. + exit 1 +else + cd "${PROJECT_ROOT}" + + if [ ! -d "${SVN_CLONE}" ]; then + git svn clone "${SVN_REPO}" "${SVN_LAYOUT}" "${SVN_CLONE}" + cd "${SVN_CLONE}" + else + cd "${SVN_CLONE}" + git remote rm bare || echo "failed to delete remote:bare, proceeding anyway" + # We perform a checkout because with some svn files without a + # svn:eol-style native property, gits get confused and will mark them + # as modified even if we just did a rebase before. + git checkout . + git svn rebase --fetch-all + fi + + git remote add bare "${GIT_BARE}" + git config remote.bare.push 'refs/remotes/*:refs/heads/*' + + if [ -d "${GIT_BARE}" ]; then + rm -rf "${GIT_BARE}" + fi + + mkdir -p "${GIT_BARE}" + cd "${GIT_BARE}" + git init --bare . + git symbolic-ref HEAD refs/heads/trunk + + cd "${SVN_CLONE}" + git push bare + + cd "${GIT_BARE}" + git branch -m trunk master +# To uncomment if we have some tags/branches +# git for-each-ref --format='%(refname)' refs/heads/tags | \ +# cut -d / -f 4 | \ +# while read ref; +# do +# git tag "$ref" "refs/heads/tags/$ref" +# git branch -D "tags/$ref" +# done + git remote add origin "${GIT_REPO}" + git config branch.master.remote origin + git config branch.master.merge refs/heads/master + git push --tags origin master + git push --all + + rm -rf "${GIT_BARE}" +fi