Problema interessante. Usar o próprio Git pode ser uma solução fácil. A seguir demonstra-se a comparação entre o repositório Subversion do Redmine a> e seu espelho link do GitHub para a tag 3.0.3
:
$ git clone https://github.com/redmine/redmine
$ cd redmine
$ git checkout 3.0.3
$ find -mindepth 1 -maxdepth 1 ! -name .git | xargs rm -rf
... remove files and dirs except .git
$ svn checkout https://svn.redmine.org/redmine/tags/3.0.3 .
$ git status
HEAD detached at 3.0.3
Untracked files:
(use "git add <file>..." to include in what will be committed)
.svn/
nothing added to commit but untracked files present (use "git add" to track)
Esta saída significa que não há diferença entre os checkouts git e svn da tag 3.0.3
, com .gitignore
considerado. Você pode querer adicionar /.svn
em .gitignore
.
UPDATE: script completo:
#!/bin/sh
gitrepo=https://github.com/redmine/redmine
svnrepo=https://svn.redmine.org/redmine
tmpdir=$(mktemp -d)
trap "rm -rf $tmpdir" EXIT
git clone $gitrepo $tmpdir
cd $tmpdir
git tag -l |
while read tag; do
echo
echo "git checking out $tag" &&
git checkout -q $tag >/dev/null &&
find -mindepth 1 -maxdepth 1 ! -name .git | xargs rm -rf &&
echo "svn checking out $tag" &&
svn checkout $svnrepo/tags/$tag . >/dev/null &&
git status --porcelain &&
echo "done $tag"
done
Saída:
$ ./compare.sh
Cloning into '/tmp/tmp.BYnBNQqB7I'...
remote: Counting objects: 120652, done.
remote: Total 120652 (delta 0), reused 0 (delta 0), pack-reused 120652
Receiving objects: 100% (120652/120652), 39.16 MiB | 6.40 MiB/s, done.
Resolving deltas: 100% (91652/91652), done.
Checking connectivity... done.
git checking out 0.2.0
svn checking out 0.2.0
?? .svn/
done 0.2.0
git checking out 0.3.0
svn checking out 0.3.0
?? .svn/
done 0.3.0
git checking out 0.4.0
svn checking out 0.4.0
?? .svn/
done 0.4.0
...