A little off-topic, but I just spent hours trying to get this to work. Basically, I’m moving a bunch of Rails plugins over to github and need to edit the history to move all files up one level. For example, PackR looks like this in SVN:
trunk packr lib tasks test ... branches 3.1 packr lib ...
It’s like that so that when you call
http://.../packr/trunk/packr it creates the right directory in
vendor/plugins. When moving to Git I wanted to remove that superfluous
directory, and the example in Git’s docs didn’t work for me (kept complaining
that it couldn’t
stat index.new). Here’s how I got this to work, it’s probably
not the most elegant thing since my knowledge of bash scripting and
slim to non-existent, but hey it works:
git filter-branch --tree-filter ' \ for dir in $(git ls-files | \ sed -r "s/^packr//g" | sed -r "s/[^\/]+$//g"); \ do mkdir -p .$dir; \ done; \ for file in $(git ls-files | sed -r "s/^packr//g"); \ do mv -f packr$file .$file; \ done' \ --tag-name-filter 'cat' HEAD
Eh voila, PackR is up on github!