Re: Trying to sync two svn repositories with git-svn (repost)
From: Josef Wolf <hidden>
Date: 2016-06-15 22:46:42
On Fri, May 01, 2009 at 03:17:14PM -0400, Avery Pennarun wrote:
On Fri, May 1, 2009 at 10:28 AM, Josef Wolf [off-list ref] wrote:quoted
On Thu, Apr 30, 2009 at 06:59:50PM -0400, Avery Pennarun wrote:quoted
"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 :)
quoted
quoted
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.
quoted
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.