diff --git a/bash/git-svn-relocate.sh b/bash/git-svn-relocate.sh new file mode 100755 index 0000000..66f3515 --- /dev/null +++ b/bash/git-svn-relocate.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +# Must be called with two command-line args. +# Example: git-svn-relocate.sh http://old.server https://new.server +if [ $# -ne 2 ] +then + echo "Please invoke this script with two command-line arguments (old and new SVN URLs)." + exit $E_NO_ARGS +fi + +# Prepare URLs for regex search and replace. +oldUrl=`echo $1 | awk '{gsub("[\\\.]", "\\\\\\\&");print}'` +newUrl=`echo $2 | awk '{gsub("[\\\&]", "\\\\\\\&");print}'` + +filter="sed \"s|^git-svn-id: $oldUrl|git-svn-id: $newUrl|g\"" +git filter-branch --msg-filter "$filter" -- --all + +sed -i.backup -e "s|$oldUrl|$newUrl|g" .git/config + +rm -rf .git/svn +git svn rebase diff --git a/bash/git-svn-relocate2.sh b/bash/git-svn-relocate2.sh new file mode 100755 index 0000000..555229e --- /dev/null +++ b/bash/git-svn-relocate2.sh @@ -0,0 +1,56 @@ +#!/bin/bash +# git-svn-switch +# by Justen Hyde based on this blog post: +# +# http://translate.org.za/blogs/wynand/en/content/changing-your-svn-repository-address-git-svn-setup +# +# Use at your own risk. For the love of cthulhu, back +# your repo up before letting this loose on it. + +if [ $# -ne 1 ] +then + echo "Usage: `basename $0` {new subversion url}" + exit -1 +fi + +if [[ $1 = "--help" || $1 = "-h" ]] +then + echo + echo "Usage: `basename $0` {new subversion url}" + echo + echo " Changes the url of the subversion repository a git-svn repo is connected to." + echo " Analogous to svn switch. Potentially a weapon of mass destruction. Use with care." + echo " Run this from within your git repo. You only need one argument: the new url of the svn repo." + echo " git-svn-switch will attempt to verify that the url is at least a svn repo before starting the switch" + echo " but don't depend on it to stop you from doing summat daft." + echo + exit 1 +fi + +# get the current subversion url +SRC=`git svn info --url` +if [ -n "$SRC" ] +then + FROM=`echo $SRC | sed "s|/trunk||"` + REPO=`svn info $1` + echo "Checking $REPO is actually a subversion repository..." + if [ -n "$REPO" ] + then + echo "The new URL looks valid." + echo "Rewriting the git history with the new url..." + SED_FILTER="sed 's;git-svn-id: "$FROM";git-svn-id: "$1";g'" + git gc + git filter-branch --msg-filter "$SED_FILTER" $(cat .git/packed-refs | awk '// {print $2}' | grep -v 'pack-refs') +#Couple of pointless checkouts - on some repos the log changes seem to need flushing by an operation like this + git checkout trunk + git checkout master + echo "Rebuild git-svn internals and updating the repo" + rm -rf .git/svn + sed -i~ 's|'$FROM'|'$1'|g' .git/config + git svn rebase + else + echo "Error: $1 Does not appear to be a subversion repository." + fi +else + echo "Error: This doesn't appear to be a git working directory, or it's a git repo that hasn't been created using a git-svn bridge" +fi