On 04/26/2012 01:29 PM, Lucas Meneghel Rodrigues wrote:
> After much thought about this subject, I went ahead and pushed a non
> fast forward update to the autotest repo, rewriting the project's
> history effectively, assigning authorship where it belongs and getting
> old cruft from the svn days.
>
> We decided to do it because:
>   * It's more fair to the over 200 contributors we had over the years
>
> $ git shortlog -s | wc -l
> 202
>
>   * Stats do matter, with a more properly written history it'll be easier
> to generate relevant stats for people, using git.
>
> So, let's consider this a much needed housekeeping initiative, and sorry
> for the inconveniences.
>
> Now, for 3rd party, I ask you guys to rebase. I did all my rebases using
> git format-patch and re-applying the patches cleanly on newly created
> branches, and you might well do the same (unless there's some fancy
> ninja git tool to do it without using patches at all). I'll be available
> to assist you, should you need any help.
>
> Thank you!
>
> Lucas

For anyone less talented with git (like me), here's some more details:

Effectively what's happened is upstream autotest's entire history won't 
match any forks or branches you have now.  The commit text is all mostly 
the same, but the indexes will have all changed.

However (at least this is my understanding), the repo on github still 
retains all the old history plus sha sums.  The effect will be, any 
branches you have currently are now pointing off in la-la-land - 
somewhere that will never receive any further updates or even be looked 
at.  It will do this silently though, which is why big announcements are 
being made.

In order to get your github forks and local branches back on-track, you 
basically need to re-jigger all of your local changes onto the "new" 
upstream indexes. This way, your history lines up with the new history 
instead of the old.  However, since the indexes won't match anymore, the 
easiest way to do this is with e-mail formatted patches:

1) Make a backup of your local autotest repo (just in case).
2) Git clone a whole new fresh copy from 
[email protected]:autotest/autotest.git
3) Re-setup any repo. customization you've made (refer to your backup 
copy's .git/config if needed).
4) Nuke your github fork (if you have one), setup your remotes, and push.
5) Using the backup copy as a reference, make new branches for 
everything you care about (and push to github fork if you have one)
6) Again using your backup, for each branch, use git format-patch 
against the old master.  You probably want to store these patch sets in 
separate directories to make life easier.
7a) If your local branch was recently rebased:
        On the new clone's recreated branches, use git am to apply the patch 
sets from #6 (and push to github fork if you have one).  It'll probably 
complain about indexes not matching, but this is okay.
7b) If your local branch hasn't been rebased in a long time, do 7a but 
with 'git am -3' (a 3-way patching) to allow you to resolve the 
conflicts "easier" - you'll probably find using git merge-tool will help.
8) You should end up with all your old local branches retaining their 
commit messages and changes, but re-aligned (rebased) with the "new" 
history.

Assuming this is confusing, take your time and read through the relevant 
man pages to refresh your understanding.  If you totally screw it up a 
few times, rely on the backup you made to start over.  If you get 
horribly stuck and need help, don't be afraid to ask here or on IRC 
(info on the wiki).

-- 
Chris Evich, RHCA, RHCE, RHCDS, RHCSS
Quality Assurance Engineer
e-mail: cevich + `@' + redhat.com o: 1-888-RED-HAT1 x44214
_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest

Reply via email to