Search code examples
svngitgit-svn

Retroactively Correct Authors with Git SVN?


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.


Solution

  • 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="user1@example.com" ;;
            "User Two") n="User Two" ; m="user2@example.com" ;;
    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!