Это быстрое решение, которое я принял за несколько минут. Он использует хорошие шаблоны регулярных выражений, которые доступны не везде.
Это захватывает чистый список ветвей. Я удаляю пробелы форматирования в начале каждой строки и пока игнорирую теги:
git branch -r | sed 's|^[[:space:]]*||' | grep -v '^tags/' > git-branch-list
Я получаю аналогичный список веток из svn, снова удаляя форматирование и конечные косые черты:
svn ls svn://path/to/branch/dir/ | sed 's|^[[:space:]]*||' | sed 's|/$||' > svn-branch-list
Я делаю списки, нахожу строки, которых больше нет в списке svn, удаляю форматирование diff, избавляюсь от ветви "trunk" (что удобно для git-svn) и сохраняю результаты в новый список:
diff -u git-branch-list svn-branch-list | grep '^-' | sed 's|^-||' | grep -v '^trunk$' | grep -v '^--' > old-branch-list
Теперь я просто выполняю стандартные процедуры удаления веток для git-svn:
for i in `cat old-branch-list`; do git branch -d -r "$i"; rm -rf .git/svn/refs/remotes/"$i"; done
Возможно, есть лучшие способы сделать это, но это работает. Кто-нибудь другой может принять это и улучшить его.