Subject: Re: Move tags to branch

From: Brad King <[email-masked]>
Date: Tue, 05 Oct 2010 13:29:22 -0400

On 10/04/2010 09:10 PM, Jakub Narebski wrote:
> Mathieu Malaterre <[email-masked]> writes:
> 
>>   I have been using svn2git to start using git. However svn2git
>> creates tags from HEAD instead of the branch. Is there a way to move
>> tags back to the branch ?
> 
> Isn't it by a chance caused by the fact that Subversion does not
> "enforce" tags to not change?

I've converted repositories with this problem before.  Subversion
"tags" are basically branches.  I usually manufacture a merge commit
to keep the tagged versions alive in history as close to inline as
possible.  For example, if the conversion result is

                      o----v2
                     /
  ...o----B----o----o----C----D  master
      \
       o----v1

because "tags" v1 and v2 have had a couple of commits, I manually
convert it to

                        o----v2
                       /      \
  ...o----B--B'--o----o----C---C'---D  master
      \      /
       o----v1

using git plumbing, grafts, and filter-branch.

B' has B as its first parent, v1 as its second parent, and the same
tree object as B.  Similarly for C', C, and v2.  The commit messages
for B' and C' explain that they were manufactured retroactively during
conversion.

Commits B and C were selected as the artificial "merge points" by
finding the newest commits in a first-parent traversal of master that
were not newer than v1 and v2, respectively.  The committer times for
B' and C' are taken from v1 and v2 (or a time shortly thereafter).

-Brad