Skip to content

Instantly share code, notes, and snippets.

@winniehell
Last active January 3, 2016 07:09
Show Gist options
  • Save winniehell/8427601 to your computer and use it in GitHub Desktop.
Save winniehell/8427601 to your computer and use it in GitHub Desktop.
BASE_DIR=$PWD
echo "create SVN repositories"
for i in {1..2}; do
svnadmin create $BASE_DIR/svn-repo$i
svn checkout file://$BASE_DIR/svn-repo$i $BASE_DIR/svn-client$i
mkdir $BASE_DIR/svn-client$i/{trunk,branches,tags}
echo "file $i" > $BASE_DIR/svn-client$i/trunk/file$i.txt
cd $BASE_DIR/svn-client$i/
svn add {trunk,branches,tags}
svn commit -m "file $i"
done
echo
echo "create Git mirrors"
git svn clone --stdlayout --prefix=repo1/ --no-metadata file://$BASE_DIR/svn-repo1 $BASE_DIR/git-mirror1
git svn clone --stdlayout --prefix=repo2/ file://$BASE_DIR/svn-repo2 $BASE_DIR/git-mirror2
echo
echo "create Git server repository"
git init $BASE_DIR/git-server
cd $BASE_DIR/git-server
echo
echo "mirror integration"
for i in {1..2}; do
git remote add svn-repo$i file://$BASE_DIR/git-mirror$i
git fetch svn-repo$i
done
git checkout -b master svn-repo2/master
git merge --no-ff -m "integrate repo1" svn-repo1/master
echo
echo "additional commits"
cd $BASE_DIR/svn-client1
svn mv $BASE_DIR/svn-client1/trunk/file1.txt $BASE_DIR/svn-client1/trunk/file2.txt
svn commit -m "rename file1 to file2"
cd $BASE_DIR/svn-client2
echo "line 2" >> $BASE_DIR/svn-client2/trunk/file2.txt
svn commit -m "add content to file2"
echo
echo "updating mirrors"
cd $BASE_DIR/git-mirror1
git svn fetch --revision 2
git rebase repo1/trunk
cd $BASE_DIR/git-mirror2
git svn rebase
echo
echo "reintegrating mirror of repo1 into server"
cd $BASE_DIR/git-server
git fetch svn-repo1
git merge --no-ff -m "integrate repo1" svn-repo1/master
echo
echo "resolving conflict"
cat $BASE_DIR/git-server/file2.txt $BASE_DIR/git-server/file2.txt~HEAD > $BASE_DIR/git-server/file2.txt.tmp
rm $BASE_DIR/git-server/file2.txt $BASE_DIR/git-server/file2.txt~HEAD
mv $BASE_DIR/git-server/file2.txt.tmp $BASE_DIR/git-server/file2.txt
git add $BASE_DIR/git-server/file2.txt
git commit -m "integrate repo1"
echo
echo "reintegrating mirror of repo2 into server"
cd $BASE_DIR/git-server
git fetch svn-repo2
git rebase --preserve-merges --merge --strategy=theirs svn-repo2/master
echo
echo "backward integration"
cd $BASE_DIR/git-mirror2
#git svn branch integrated
#git checkout -b svn-integrated repo2/integrated
git remote add git-server file://$BASE_DIR/git-server
git fetch git-server
#git merge --no-ff -m "integrate Git server" git-server/master
git rebase git-server/master
git filter-branch --parent-filter 'cut -f 2,3 -d " "'
git svn dcommit
echo
echo "check"
cd $BASE_DIR/git-mirror2
git lg
cd $BASE_DIR/svn-client2
svn up
svn log
cat trunk/*
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment