threads / discuss / 16399

New converstion tool: svn2git.py

Subject: New converstion tool: svn2git.py

## tl;dr

4 messages between Nov 19, 2008 and Nov 20, 2008.

replies: 3people: 3as markdown or json

Neil Schemenauer· Nov 19, 2008, 19:13 UTC · lore
Hi,

I'm working on a tool to do conversions from SVN to git using a SVN dump. It's in early development but perhaps some people would be interested in it:

    http://python.ca/nas/python/svn2git.py

I would like to improve it so that it intelligently converts SVN branches and tags into git branches (when possible). The basic idea is to map SVN paths into git branches, e.g. trunk -> master, branches/foo -> branch-foo, tags/bar -> tags-bar. Next, specific SVN dump actions like:

    Node-path: branches/foo
    Node-kind: dir
    Node-action: add
    Node-copyfrom-rev: 3
    Node-copyfrom-path: trunk

need to be detected and the commit needs to performed with the correct parent. One complication is that SVN can create a branch or tag from anywhere, for example, the action

    Node-path: tags/bar
    Node-kind: dir
    Node-action: add
    Node-copyfrom-rev: 3
    Node-copyfrom-path: trunk/subdir

would create tags/bar based on revision 3 of trunk/subdir. There doesn't seem to be a good way to convert that into git. I was thinking that the tags-bar branch in that case would have no parent. Would git still efficently pack that or would you end up with extra blobs?

  Neil
Kevin Menard· Nov 19, 2008, 19:39 UTC · re: Neil Schemenauer · lore

Re: New converstion tool: svn2git.py

Hi Neil,
You may want to look at this Ruby implementation for more ideas:
http://github.com/nirvdrum/svn2git/

I forked it from a project originally by James Coglan, but should be able to answer most questions about it.

-- 
Kevin



On Wed, Nov 19, 2008 at 2:13 PM, Neil Schemenauer <nas@arctrix.com> wrote:
> Hi,
>
> I'm working on a tool to do conversions from SVN to git using a SVN
> dump.  It's in early development but perhaps some people would be
> interested in it:
>
>    http://python.ca/nas/python/svn2git.py
>
> I would like to improve it so that it intelligently converts SVN
> branches and tags into git branches (when possible).  The basic idea
> is to map SVN paths into git branches, e.g. trunk -> master,
> branches/foo -> branch-foo, tags/bar -> tags-bar.  Next, specific
> SVN dump actions like:
>
>    Node-path: branches/foo
>    Node-kind: dir
>    Node-action: add
>    Node-copyfrom-rev: 3
>    Node-copyfrom-path: trunk
>
> need to be detected and the commit needs to performed with the
> correct parent.  One complication is that SVN can create a branch or
> tag from anywhere, for example, the action
>
>    Node-path: tags/bar
>    Node-kind: dir
>    Node-action: add
>    Node-copyfrom-rev: 3
>    Node-copyfrom-path: trunk/subdir
>
> would create tags/bar based on revision 3 of trunk/subdir.  There
> doesn't seem to be a good way to convert that into git.  I was
> thinking that the tags-bar branch in that case would have no parent.
> Would git still efficently pack that or would you end up with extra
> blobs?
>
>  Neil
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
Neil Schemenauer· Nov 19, 2008, 20:40 UTC · re: Kevin Menard · lore

Re: New converstion tool: svn2git.py

On Wed, Nov 19, 2008 at 02:39:26PM -0500, Kevin Menard wrote:
> You may want to look at this Ruby implementation for more ideas:
> 
> http://github.com/nirvdrum/svn2git/
> 
Hi Kevin,

Thanks for the link. I see that git-svn does most of the heavy lifting and now I see that it does try to intelligently handle branches and tags by looking for a suitable parent commit. I will have to look closer at what it's doing. Maybe it is sufficient for my task.

Regards,
  Neil
Daniel Barkalow· Nov 20, 2008, 18:49 UTC · re: Neil Schemenauer · lore

Re: New converstion tool: svn2git.py

On Wed, 19 Nov 2008, Neil Schemenauer wrote:
Show 33 quoted lines
> Hi,
> 
> I'm working on a tool to do conversions from SVN to git using a SVN
> dump.  It's in early development but perhaps some people would be
> interested in it:
> 
>     http://python.ca/nas/python/svn2git.py
> 
> I would like to improve it so that it intelligently converts SVN
> branches and tags into git branches (when possible).  The basic idea
> is to map SVN paths into git branches, e.g. trunk -> master,
> branches/foo -> branch-foo, tags/bar -> tags-bar.  Next, specific
> SVN dump actions like:
> 
>     Node-path: branches/foo
>     Node-kind: dir
>     Node-action: add
>     Node-copyfrom-rev: 3
>     Node-copyfrom-path: trunk
> 
> need to be detected and the commit needs to performed with the
> correct parent.  One complication is that SVN can create a branch or
> tag from anywhere, for example, the action
> 
>     Node-path: tags/bar
>     Node-kind: dir
>     Node-action: add
>     Node-copyfrom-rev: 3
>     Node-copyfrom-path: trunk/subdir
> 
> would create tags/bar based on revision 3 of trunk/subdir.  There
> doesn't seem to be a good way to convert that into git.  I was
> thinking that the tags-bar branch in that case would have no parent.

Probably the best thing in git would be to have the parent of the initial commit on that branch be revision 3 of trunk; it will look like a big rename of everything from subdir/* into the project root directory, which is essentially what happened.

> Would git still efficently pack that or would you end up with extra
> blobs?

git will only ever store a single copy of identical file contents, regardless of anything at all. Furthermore, when making a pack, git compresses everything in the pack against everything else in the pack. Its heuristics also ignore the leading directory names in guessing which blobs are likely to help in compression (because there's a good chance that anything named "Makefile" anywhere is useful in compressing anything else named "Makefile").

	-Daniel
*This .sig left intentionally blank*

← back to recent threads