I recently imported the old Clutch code into git , but for some reason it ignored the authors.txt file I provided, and used the original svn user names.

This info is based largely on this stack overflow post .

First, clone your repository locally :

> git clone git@recurser.com:clutch.git

Once this is done, change into the local repository directory and run the following command to find out which users you need to change :

> git shortlog -s

Create a shell script in the same directory with the following contents (thanks Dec!):


git filter-branch --env-filter '


case ${GIT_AUTHOR_NAME} in
        user1) n="User One" ; m="user1@example.com" ;;
        "User Two") n="User Two" ; m="user2@example.com" ;;

export GIT_AUTHOR_NAME="$n"
export GIT_AUTHOR_EMAIL="$m"

Obviously change user1, “User One” etc so the script reflects the users you want to change. Run the script (which might take a few minutes), and everything should be sorted out on the local copy.

Next, you want to push these changes to your master repository. Normally you would git push , but in this case you get an error something like :

> git push
To git@recurser.com:clutch.git
 ! [rejected]        master -> master (non-fast forward)
error: failed to push some refs to 'git@recurser.com:clutch.git'

For reasons I don’t really understand after only a couple of days of git usage, you need to pull from the remote repository again before you can push the changes :

> git pull git@recurser.com:clutch.git
Merge made by recursive.
> git push
Counting objects: 1896, done.
Compressing objects: 100% (1785/1785), done.
Writing objects: 100% (1843/1843), 1.81 MiB | 1816 KiB/s, done.
Total 1843 (delta 1173), reused 0 (delta 0)
To git@recurser.com:clutch.git
   74907e9..28f2cdc  master -> master

Now (with a bit of luck) everything should be sorted out. If anyone knows off the top of their head why the git pull is necessary I’d be interested to know!