Search code examples
git-svn

How do I clone a git repo from a local svn repo


I want to learn to use git-svn. I have an svn local repository on my disk that I've checked out a while ago using something like this:

svn co http://myserver.com/mysvnrepo/trunk/ /mysvnrepo/
ls -a /mysvnrepo/
.     ..     .svn     foo     bar

This /mysvnrepo/ is HUGE, so I want to avoid re-downloading or copying the files at all costs.

I'm wondering if there's a way to git clone this local repo without downloading / copying anything (because it's already there).

I have this which seems to be what I'm looking for, but when I do that it doesn't quite give me what I expect.

cd /mysvnrepo/
git svn clone file://mysvnrepo/
ls /mysvnrepo/
.     ..     .git     .svn     foo     bar
git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   .svn/
#   foo/
#   bar/

I would expect git to detect foo and bar as "versioned and up-to-date".

According to the docs it seems that I need to use git svn init because git svn clone runs a fetch, which I certainly don't want. So I tried

git svn init --trunk=file:///mysvnrepo/

...but no luck.

I'm completely new to git, so my confusion is off-the-charts... am I doing something utterly wrong?

Thanks in advance


Solution

  • You cannot take a subversion snapshot and convert it into a git repository.

    It sounds like you are trying to avoid a lengthy initialization of the git repository from svn: which ordinarily will try to ready your entire history. This can be done in another way, by limiting the fetch to recent history depending on how much history is relevant to you:

    git svn clone -s -r 12334:HEAD https://svn.host.org/repo
    

    Where 12334 is the earliest svn revision you are interested in and assuming that the repo is laid out in a standard svn way with branches and tags.