threads / discuss / 11659

git-svn: how to connect SVN branches?

Subject: git-svn: how to connect SVN branches?

## tl;dr

4 messages between Jan 17, 2008 and Jan 18, 2008.

replies: 3people: 3as markdown or json

dherring@ll.mit.edu· Jan 17, 2008, 20:17 UTC · lore
Hi,

The project I'm tracking changed servers a couple months ago. To simulate the svn-switch, I edited the svn-remote.url to the new location. `git-svn fetch`, `git-svn dcommit`, and the like seemed to work ok.

When a new release branch came out, I tried adding svn-remote.branches = releases/*:refs/remotes/svn/*

`git-svn fetch` pulled the new branch. However, it created a whole new history for this branch (new git commits from the beginning of the SVN repo).

Is there some way to tell git/git-svn to connect these two histories?
Pictorially, I have

SVN1@a---SVN2@a---SVN3@b---SVN4@b---SVNtrunk SVN1@b---SVN2@b---SVN3@b---SVN4@b---SVNbranch

and want
SVN1@a---SVN2@a---SVN3@b---SVN4@b---SVNtrunk
                                  \--SVNbranch

Similarly, if someone cloned a git repo full of git-svn-id's (which indicate that an svn --switch occurred) but without any matching git-svn data, is there a way to `git-svn fetch` from the new SVN repo and autoconnect the git commits?

Thanks, Daniel

Sam Vilain· Jan 17, 2008, 22:04 UTC · re: dherring@ll.mit.edu · lore

Re: git-svn: how to connect SVN branches?

dherring@ll.mit.edu wrote:
Show 14 quoted lines
> Hi,
> 
> The project I'm tracking changed servers a couple months ago.  To simulate 
> the svn-switch, I edited the svn-remote.url to the new location.  `git-svn 
> fetch`, `git-svn dcommit`, and the like seemed to work ok.
> 
> When a new release branch came out, I tried adding
> svn-remote.branches = releases/*:refs/remotes/svn/*
> 
> `git-svn fetch` pulled the new branch.  However, it created a whole new 
> history for this branch (new git commits from the beginning of the SVN 
> repo).
> 
> Is there some way to tell git/git-svn to connect these two histories?

git-svn doesn't yet support arbitrary mapping of paths like that. You need to add a separate git-svn remote, and you might have to graft to get it started - see below.

> Pictorially, I have
> 
> SVN1@a---SVN2@a---SVN3@b---SVN4@b---SVNtrunk
> SVN1@b---SVN2@b---SVN3@b---SVN4@b---SVNbranch

That's unfortunate. There are many things that git-svn does to try to avoid this happening. You can fix it using the .git/info/grafts facility - check the Documentation/ for information on that. Once you've got it looking right, git filter-branch can be used to make it permanent, though you should certainly delete the git-svn metadata after using that.

> Similarly, if someone cloned a git repo full of git-svn-id's (which 
> indicate that an svn --switch occurred) but without any matching git-svn 
> data, is there a way to `git-svn fetch` from the new SVN repo and 
> autoconnect the git commits?

You basically have to fool git-svn by making commits in the history which have the git-svn-ids that you want. This can be done without changing the "real" history as above, using grafts.

Good luck, Sam.

dherring@ll.mit.edu· Jan 18, 2008, 14:43 UTC · re: Sam Vilain · lore

Re: git-svn: how to connect SVN branches?

Sam, Gregory, thanks for solving my problem.
On Thu, 17 Jan 2008, Sam Vilain wrote:
Show 22 quoted lines
> dherring@ll.mit.edu wrote:
>> `git-svn fetch` pulled the new branch.  However, it created a whole new
>> history for this branch (new git commits from the beginning of the SVN
>> repo).
>>
>> Is there some way to tell git/git-svn to connect these two histories?
>
> git-svn doesn't yet support arbitrary mapping of paths like that.  You
> need to add a separate git-svn remote, and you might have to graft to
> get it started - see below.
>
>> Pictorially, I have
>>
>> SVN1@a---SVN2@a---SVN3@b---SVN4@b---SVNtrunk
>> SVN1@b---SVN2@b---SVN3@b---SVN4@b---SVNbranch
>
> That's unfortunate.  There are many things that git-svn does to try to
> avoid this happening.  You can fix it using the .git/info/grafts
> facility - check the Documentation/ for information on that.  Once
> you've got it looking right, git filter-branch can be used to make it
> permanent, though you should certainly delete the git-svn metadata after
> using that.

Documentation/repository-layout.txt had the best info on grafts. A few graft lines and my git repo looks just right. For now, I'm scared of breaking git-svn again; filter-branch can wait for later.

Thanks again, Daniel

Gregory Jefferis· Jan 17, 2008, 23:42 UTC · re: dherring@ll.mit.edu · lore

Re: git-svn: how to connect SVN branches?

Re connecting the two svn histories, there are some similarities to a situation that I had. See:

Statement of problem: http://permalink.gmane.org/gmane.comp.version-control.git/69486

Eventual solution: http://thread.gmane.org/gmane.comp.version-control.git/69486

Nicely formatted code snippet: http://pastie.textmate.org/private/pv1n1nbmcmtxnxbq4zd7w

Best,
Greg.
On 17/1/08 20:17, "dherring@ll.mit.edu" <dherring@ll.mit.edu> wrote:
Show 36 quoted lines
> Hi,
> 
> The project I'm tracking changed servers a couple months ago.  To simulate
> the svn-switch, I edited the svn-remote.url to the new location.  `git-svn
> fetch`, `git-svn dcommit`, and the like seemed to work ok.
> 
> When a new release branch came out, I tried adding
> svn-remote.branches = releases/*:refs/remotes/svn/*
> 
> `git-svn fetch` pulled the new branch.  However, it created a whole new
> history for this branch (new git commits from the beginning of the SVN
> repo).
> 
> Is there some way to tell git/git-svn to connect these two histories?
> 
> Pictorially, I have
> 
> SVN1@a---SVN2@a---SVN3@b---SVN4@b---SVNtrunk
> SVN1@b---SVN2@b---SVN3@b---SVN4@b---SVNbranch
> 
> and want
> 
> SVN1@a---SVN2@a---SVN3@b---SVN4@b---SVNtrunk
>                                   \--SVNbranch
> 
> Similarly, if someone cloned a git repo full of git-svn-id's (which
> indicate that an svn --switch occurred) but without any matching git-svn
> data, is there a way to `git-svn fetch` from the new SVN repo and
> autoconnect the git commits?
> 
> Thanks,
> Daniel
> -
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

← back to recent threads