git filter-branch
Ce script , tiré de un article de blog a fonctionné pour moi. Fournir l'ancien et le nouveau repo URL comme paramètre, comme pour svn switch --relocate
.
Le script appelle git filter-branch
pour remplacer les URL de Subversion dans les git-svn-id
dans les messages de validation, les mises à jour .git/config
et met également à jour git-svn
en recréant les métadonnées à l'aide de git svn rebase
. Alors que git svn clone
pourrait être la solution la plus robuste, la filter-branch
Cette approche est beaucoup plus rapide pour les gros dépôts (heures contre jours).
#!/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