Retroactively Correct Authors with Git SVN?

Daniel Spiewak picture Daniel Spiewak · Dec 25, 2008 · Viewed 9.7k times · Source

I have a repository which I have already cloned from Subversion. I've been doing some work in this repository in its Git form and I would hate to lose that structure by cloning again.

However, when I originally cloned the repository, I failed to correctly specify the svn.authors property (or a semantically-similar option).

Is there any way I can specify the SVN author mappings now that the repository is fully Git-ified?

Preferably, I would like to correct all of the old commit authors to represent the Git author rather than the raw SVN username.

Answer

Dustin picture Dustin · Dec 25, 2008

Start out by seeing what you've got to clean up:

git shortlog -s

For each one of those names, create an entry in a script that looks like this (assuming you want all the authors and committers to be the same):

#!/bin/sh

git filter-branch --env-filter '

n=$GIT_AUTHOR_NAME
m=$GIT_AUTHOR_EMAIL

case ${GIT_AUTHOR_NAME} in
        user1) n="User One" ; m="[email protected]" ;;
        "User Two") n="User Two" ; m="[email protected]" ;;
esac

export GIT_AUTHOR_NAME="$n"
export GIT_AUTHOR_EMAIL="$m"
export GIT_COMMITTER_NAME="$n"
export GIT_COMMITTER_EMAIL="$m"
'

That's basically the script I used for a large rewrite recently that was very much as you described (except I had large numbers of authors).

edit Use π pointed out a quoting problem in my script. Thanks!