Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/nothingmuch/git-svn-abandon

history preserving svn to git migration using git-svn
https://github.com/nothingmuch/git-svn-abandon

Last synced: 3 months ago
JSON representation

history preserving svn to git migration using git-svn

Awesome Lists containing this project

README

        

Installation:
=============

Place these scripts anywhere in `$PATH` (e.g. create symlinks in
`/usr/local/bin`) and make sure they are executable, just like any other
script. The `git` command will know how to find them.

Usage:
======

See [my detailed blog post][1] for a how-to.

[1]: http://blog.woobling.org/2009/06/git-svn-abandon.html

In brief:

1. Install (above), then git svn clone your repo, preferably
using Sam Vilain's [svn-merge-attrs branch]
(http://github.com/samv/git/tree/svn-merge-attrs), using
`--prefix svn`. This assumes standard layout.

2. Inside the repo run `git svn-abandon-fix-refs`

3. Create `.git/info/grafts` file for merge commits
(might not be necessary with the svn-merge-attrs branch).
This is just if you have any svn merges that occurred between branches.

4. Run `git-svn-abandon-cleanup`

The resulting repository should have only `refs/heads/*` and tags.
All svn tags are recreated as annotated tags.

`git-svn-id:` and svk message pollution is cleaned up.

When you have a merge commit that is not recognized as such, the grafts file
can be used to add additional parents, preserving history information.

Troubleshooting:
=======

You may get this error message:

% git svn-abandon-fix-refs
git: 'svn-abandon-fix-refs' is not a git-command. See 'git --help'.

This means you haven't placed those scripts in your `PATH`.

Alternatives
=======

If this script is too slow for a large repository, or doesn't handle something
complicated look into Snerp Vortex:

http://github.com/rcaputo/snerp-vortex

For a simpler approach, several `svn2git` scripts exist, in both Ruby and Perl.

Maintenance:
=======

These commands are more for abandoning SVN in favour of git and getting as
clean a history as possible. Maintenance is just like a normal git repository.

After `git svn-abandon-cleanup` has been run, `git svn rebase` can't be run
anymore, so you can't bring it up to date without keeping the old SVN repo
around and grafting things to the conversion.