We are trying to migrate from svn to git using svn2git utility (https://github.com/nirvdrum/svn2git). The utility seems to fail every time with below error. If anyone has seen the same error or have any better alternatives, please share.
commandsvn2git https://xyz.xyz.com/svn/svnrepo/ --verbose --authors authors.txt
console output
Running command: git svn init --prefix=svn/ --no-metadata --trunk='trunk' --tags
='tags' --branches='branches' https://xyz.xyz.com/svn/svnrepo/
Running command: git config --local --get user.name
Running command: git config --local svn.authorsfile authors.txt
Running command: git svn fetch
Running command: git branch -l --no-color
Running command: git branch -r --no-color
Running command: git config --local --get user.name
Running command: git config --local --get user.email
Running command: git checkout -f master
error: pathspec 'master' did not match any file(s) known to git.
command failed:
git checkout -f master
P.S. My SVN repo URL is correct too, it's just above the trunk. I am trying this on Win7 64-bit machine.
Late, but someone might still need this. I managed to track this down to the issue #241. Long story short, Windows doesn't understand single quotes ('
) around arguments which the script adds to git
command. There are probably various ways to fix it, but I just manually hacked the migration.rb
file, namely the following snippet:
cmd += "--trunk=#{trunk} " unless trunk.nil?
unless tags.nil?
# Fill default tags here so that they can be filtered later
tags = ['tags'] if tags.empty?
# Process default or user-supplied tags
tags.each do |tag|
cmd += "--tags=#{tag} "
end
end
unless branches.nil?
# Fill default branches here so that they can be filtered later
branches = ['branches'] if branches.empty?
# Process default or user-supplied branches
branches.each do |branch|
cmd += "--branches=#{branch} "
end
Note there are no quotes around #{trunk}
, #{tag}
and #{branch}
any more. That did the trick.
There are pleny tools called svn2git
, the probably best one is the KDE one from https://github.com/svn-all-fast-export/svn2git. I strongly recommend using that svn2git
tool. It is the best I know available out there and it is very flexible in what you can do with its rules files.
The svn2git
tool you used is based on git-svn
and git-svn
is not the right tool for one-time conversions of repositories or repository parts. It is a great tool if you want to use Git as frontend for an existing SVN server, but for one-time conversions you should not use git-svn
, but svn2git
which is much more suited for this use-case.
If you are not 100% about the history of your repository, svneverever
from http://blog.hartwork.org/?p=763 is a great tool to investigate the history of an SVN repository when migrating it to Git.
Even though git-svn
(or the wrong svn2git
in your case) is easier to start with, here are some further reasons why using the KDE svn2git
instead of git-svn
is superior, besides its flexibility:
svn2git
(if the correct one is used), this is especially the case for more complex histories with branches and merges and so ongit-svn
the tags contain an extra empty commit which also makes them not part of the branches, so a normal fetch
will not get them until you give --tags
to the command as by default only tags pointing to fetched branches are fetched also. With the proper svn2git tags are where they belongsvn2git
, with git-svn
you will loose history eventuallysvn2git
you can also split one SVN repository into multiple Git repositories easilysvn2git
than with git-svn
There are many reasons why git-svn
is worse and the KDE svn2git
is superior. :-)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With