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
[email protected]