Re: Trying to sync two svn repositories with git-svn (repost)
- From
- Josef Wolf <jw@raven.inka.de>
- Date
- May 2, 2009, 21:58 UTC
- Message-ID
- <20090502215852.GJ15420@raven.wolf.lan>
- In-Reply-To
- <32541b130905011217x7f339d41x696fedee7298e3a4@mail.gmail.com>
On Fri, May 01, 2009 at 03:17:14PM -0400, Avery Pennarun wrote:
Show 10 quoted lines
> On Fri, May 1, 2009 at 10:28 AM, Josef Wolf <jw@raven.inka.de> wrote: > > On Thu, Apr 30, 2009 at 06:59:50PM -0400, Avery Pennarun wrote: > >> "git log -1 first-svn" would give you the first cherry-pick. But > >> remember, it's a completely different branch. > > > > I can see why this happens, but I still find it confusing. Maybe I > > should help with the -m option? > > I don't know what -m does. Maybe try looking at the graph with gitk; > that might give some clues.
Option -m lets me set the log message explicitly :)
Show 7 quoted lines
> >> Okay, if you want to end up with two different remote branches, it > >> makes sense to have two different local branches. > > > > Well, I _have_ two different remotes because I have two svn repositories. > > Right. I was just wondering whether you wanted the two branches' > contents to be *different* or identical. I guess different.
They have to stay different, because they are localized.
Show 14 quoted lines
> > Then I have to keep both local branches. But I still wonder why you > > suggested to go with _one_ local branch. > > For my own purposes, I try not to create a 1:1 mapping between local > branches and remote branches; this just ends up being confusing, > because I can have commits in my local branch that aren't in the > remote one, and vice versa. So it's not very useful to create a local > branch *just* because I have a corresponding remote branch. > > In your case, you might want to have just a single local branch for > your "public" stuff. You would then merge changes from the two svn > remote branches into your local branch, and you'd also merge from your > local branch into your remote branches (using a disconnected HEAD and > svn dcommit).
But I am working not only on the "public" stuff. Additionally, I am working on _multiple_ localized stuff. Thus, I have multiple remote repositories.
Somehow, I still can't get it work. This is what I do:
# create the repos # git svn init --stdlayout file:///var/tmp/builds/git-sync/svn/svn-1 git config merge.stat true
# add configuration for svn-1 repos # git config svn-remote.svn-1.url file:///var/tmp/builds/git-sync/svn/svn-1 git config svn-remote.svn-1.fetch trunk:refs/remotes/svn-1/trunk git config svn-remote.svn-1.branches branches/*:refs/remotes/svn-1/* git config svn-remote.svn-1.tags tags/*:refs/remotes/svn-1/tags/*
# add configuration for svn-2 repos # git config svn-remote.svn-2.url file:///var/tmp/builds/git-sync/svn/svn-2 git config svn-remote.svn-2.fetch trunk:refs/remotes/svn-2/trunk git config svn-remote.svn-2.branches branches/*:refs/remotes/svn-2/* git config svn-remote.svn-2.tags tags/*:refs/remotes/svn-2/tags/*
# fetch the commits from svn repositories # git svn fetch -R svn-1 git svn fetch -R svn-2
# create local tracking branches # git checkout -b svn-1 svn-1/trunk git checkout -b svn-2 svn-2/trunk
# just to see what we've done # git tag svn-1-orig svn-1 git tag svn-2-orig svn-2
# move stuff from svn-2 to svn-1 # git svn fetch svn-2 git checkout svn-1 git cherry-pick 05b964 [ continue cherry-picking ] git merge --no-ff -s ours svn-1
# check what I have done # git diff svn-1-orig svn-1/trunk # shows what I expect
# move the result to svn-1 # git checkout svn-1/trunk git merge --no-ff svn-1 git svn dcommit
# move stuff from svn-1 to svn-2 # git svn fetch svn-1 git checkout svn-2 git cherry-pick -n c9dae [ continue cherry-picking ] git merge --no-ff -s ours svn-2
# check what I have done # git diff svn-2-orig svn-2/trunk # shows what I expect
# move the result to svn-2 # git checkout svn-2/trunk git merge --no-ff svn-2 git svn dcommit
At this point, we should be synchronized.
git checkout svn-2/trunk git svn fetch svn-1 git merge --no-ff svn-1
BOOM. Although no new commits were fetched, we get a lot of conflicts here. So git is not fully aware about the fact that we are synchronized.