Re: Git conversion with svn-all-fast-export
Marius Gedminas <[email protected]>
| Newsgroups | gmane.comp.web.zope.devel |
|---|---|
| Message-ID | <20130212170550.GA19981@platonas> |
On Mon, Feb 04, 2013 at 09:59:37PM +0200, Marius Gedminas wrote:
> You need:
>
> - svn-all-fast-export (from the Debian/Ubuntu package of the same name;
> upstream homepage is http://gitorious.org/svn2git, not related to a
> Ruby tool of the same name)
>
> - a copy of the Subversion repository
>
> Good thing I have one set up, using svnsync:
>
> # http://svnbook.red-bean.com/nightly/en/svn.reposadmin.maint.html#svn.reposadmin.maint.replication
> svnadmin create /stuff/zope-mirror
> svnadmin setuuid /stuff/zope-mirror 62d5b8a3-27da-0310-9561-8e5933582275
> svnsync init file:///stuff/zope-mirror svn://svn.zope.org/repos/main/
> svnsync sync file:///stuff/zope-mirror
> # repeat last command periodically
>
> It needs about 3.3 gigs of disk space.
>
> - a copy of authors.txt that maps svn usernames to real names and emails
> (ask Tres or Jim)
>
> - an empty repository on Github (ask Tres or Jim to create one at
> https://github.com/zopefoundation)
>
>
> The conversion process goes like this:
>
> - write a rules.txt like this one I used for zope.dottedname:
>
> create repository zope.dottedname
> end repository
>
> # feel free to create multiple repositories in one go
>
> # order of matches matters in this file
> # trailing slashes in match rules are very important
>
> match /(zope\.dottedname)/trunk/
> repository \1
> branch master
> end match
>
> match /(zope\.dottedname)/branches/([^/]+)/
> repository \1
> branch \2
> end match
>
> match /(zope\.dottedname)/tags/([^/]+)/
> repository \1
> branch refs/tags/\2
> end match
>
> match /
> # ignore all other projects
> end match
>
> - run svn-all-fast-export --identity-map=authors.txt --rules=rules.txt --stats \
> /path/to/your/zope-svn-mirror
You can also pass --svn-branches for a slightly more accurate conversion
(branch merge commits do not go away, even when the diff is empty), if
I understand it correctly.
And if you pass --add-metadata-notes, you'll get to see svn path and
revno attached to a note on each commit. These are shown by git log.
These notes are easy to lose (git push --all/--tags doesn't push them;
git clone doesn't fetch them). Read more about them at
http://git-scm.com/2010/08/25/notes.html
The notes are shown on Github like this:
https://github.com/zopefoundation/zope.traversing/commit/c10f103#gitnotes
> - inspect ./zope.dottedname for sanity
>
> I recommend tig as a very nice console-mode interactive git history viewer.
Sometimes the conversion tool produces strands of unrelated history.
tig --all interleaves them which makes this hard to notice. gitk --all
shows them separately.
You can connect the strands by creating a grafts file, and you can make
the connections permanent (I don't think the grafts file survives a git
push) by running git-filter-branch.
> For an example of things to inspect, e.g., there was a deleted 3.4.1 tag
> from http://zope3.pov.lt/trac/changeset/80495, which shouldn't have been
> deleted, according to http://zope3.pov.lt/trac/changeset/80499, so I've
> re-created the tag from refs/backups/r80495/tags/3.4.1 that was left by
> the conversion tool.
And 'git shortlog -s' is a good way to check if your authors.txt was
complete and correct.
Note: if you find you need to re-run the conversion, make sure to rm -rf
the git repository _and_ the log-zope.whateverpackage file that
svn-all-fast-export uses to remember where it last crashed.
> - upload to github
This'll be
git remote add origin [email protected]:zopefoundation/zope.dottedname.git
git push -u origin --mirror
if you want to push everything (branches, tags, notes).
Marius Gedminas
--
http://pov.lt/ -- Zope 3/BlueBream consulting and development
_______________________________________________
Zope-Dev maillist - [email protected]
https://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
https://mail.zope.org/mailman/listinfo/zope-announce
https://mail.zope.org/mailman/listinfo/zope )
signature.asc
(application/pgp-signature, 190 B)
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iD8DBQFRGnZukVdEXeem148RAgAmAJ0e7Dzh2FZTnh+M1j+6IPub9AkAjgCfbvOf AQtuWaJep9wXl8kKVHwfSbk= =vX02 -----END PGP SIGNATURE-----