Thread (31 messages) flat view 31 messages, 2 authors, 2016-06-15

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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help