Something that I did create over some years – there is nothing similar that I have found as a open/OSS solution, so therefore I’d like to share it.
#!/bin/bash if [ -f ~/tmp/git2svn.lock ]; then echo "git2svn is already processing..." exit 0 else touch ~/tmp/git2svn.lock fi echo "$(date --iso-8601=minutes) === git2svn.sh sync repos ===" for repo in $HOME/repos/* ; do cd "${repo}" git checkout -b svn/git-svn git checkout svn/git-svn git svn fetch git svn rebase git checkout master git pull --rebase upstream master git checkout svn/git-svn MESSAGE=`git log --pretty=format:'%ai | %B [%an]' HEAD..master` git merge --no-ff --no-log -m "${MESSAGE}" master git svn dcommit git checkout master git merge svn/git-svn git push upstream master done rm ~/tmp/git2svn.lock
The trick is to use two different local only branches in which you do the merging vice versa. Just using one branch like master will cause serious issues.