I've previously noted that when we move to git, while we should use a 
clean conversion with proper author attributions, we should also keep the 
commits from the existing git mirror available somewhere as there are 
various git-only branches there and lots of references to git commit ids 
in the list archives.

This can be done either by renaming the existing mirror and keeping it 
available read-only in some public location, or by having both sets of 
objects in one repository.  Given a conversion with reposurgeon, I've now 
tested the following command as a way to get the objects from the existing 
mirror into the same repository:

git fetch --no-tags \
    git://gcc.gnu.org/git/gcc.git \
    'refs/heads/*:refs/heads/git-old/*' \
    'refs/remotes/*:refs/heads/git-svn-old/*' \
    'refs/tags/*:refs/tags/git-old/*'

Doing this increases the size of the repository (after git gc 
--aggressive) from 1.4 GB to 1.7 GB (most blob and tree objects being the 
same between the two versions of the history).  It's also possible to use 
different ref names that aren't fetched by default such as refs/git-old/*.

If someone wishes to move an existing git-only branch to be based on the 
new version of the history, rebasing is probably better than merging, to 
avoid confusing effects of a commit having the whole of both old and new 
versions of master in its ancestry.

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to