Re: Trying to sync two svn repositories with git-svn (repost)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, May 08, 2009 at 04:44:39PM -0400, Avery Pennarun wrote:
> I agree that gitk's lane-changing can be a bit confusing.  Could you
> try making a slightly modified version of your script, where you only
> cherry-pick one or two commits in each direction?  That should be
> functionally identical, but a much simpler diagram.

Somehow I can't keep git-svn from fetching all the svn revisions, thus
it's still split over a long distance.

But in the meantime, I've hacked a quick-n-dirty script to show only
the 'interesting' commits with an optional context.  This helped me a
lot to get a better understanding what's going on.  I have appended the
result at the end of this mail.  Please convert it with "dot -Tps" to
postscript to view the result.

So here I go again with my attempt to analyze what happens.  I attach
the sha1 of created commits as a comment to the command that creates the
commit.

  # Create tags so we can see later what we have done
  #
  git tag svn-1-orig svn-1
  git tag svn-2-orig svn-2

  # move cherries from svn-1 to svn-2
  #
  git svn fetch svn-1
  git checkout svn-2
  [ cherry-picking, creates 67446..0a742 ]
  git merge --no-ff -s ours svn-1 -m 'merge ours svn-1 to svn-2' # 5d9a0
  git checkout svn-2/trunk
  git merge --no-ff svn-2 -m 'merge svn-1 to svn-2'              # f80d2
  git svn dcommit

  # check the results
  #
  git diff svn-2-orig svn-2/trunk
  git diff svn-2-orig svn-2

  # move cherries from svn-1 to svn-2
  #
  git svn fetch svn-2
  git checkout svn-1
  [ cherry-picking, creates a5cf3..c3ff2 ]
  git merge --no-ff -s ours svn-2 -m 'merge ours svn-2 to svn-1' # 2379d
  git checkout -q svn-1/trunk
  git merge --no-ff svn-1 -m 'merge svn-2 to svn-1'              # 693fa
  git svn dcommit --no-rebase

  # again, check the results
  #
  git diff svn-1-orig svn-1/trunk
  git diff svn-1-orig svn-1

At this time, I made the graph attached below.  Two things are
interesting in this graph:
- svn-1 has all the imported commits and all the cherries as parent
  svn-2 does _not_ have a5cf3..c3ff2 as parent
- same thing happens for remotes/svn-2/trunk vs. remotes/svn-2/trunk


Now, when I do

  git checkout svn-2       # same thing happens when svn-2/trunk is used
  git merge --no-ff svn-1

And here I'm completely barfed.  The tree is set _identical_ to the tree
in 2379d.  All the differences which should be kept are lost here.
I can easily see (although I don't know how to avoid it) why a5cf3..c3ff2
might be applied to svn-2 and svn-2/trunk though it should not be applied.

But I completely fail to see why the tree is set identical to 2379d.


Here is an overview of the created commits:

# b8bf1, 8536f..09393, d0f29   imported from svn-1 repository
# 7b397, 17156..e0772, 05eb1   imported from svn-2 repository
# a5cf3..c3ff2                 cherries from svn-2 to svn-1
# 67446..0a742                 cherries from svn-1 to svn-2
# 5d9a0     merge ours svn-1 to svn-2
# 693fa     merge svn-2 to svn-1
# 2379d     merge ours svn-2 to svn-1
# f80d2     merge svn-1 to svn-2

And here's the .dot graph.  Please pipe it through "dot -Tps" to create
a postscript file of the graph.

strict digraph G {
  size = "7,10"
  "8536f" [label="8536f"] ;
  "b8bf1"->"8536f"  ;
  "693fa" [label="693fa\nremotes/svn-1/trunk"] ;
  "d0f29"->"693fa"  ;
  "2379d"->"693fa"  ;
  "5d9a0" [label="5d9a0\nsvn-2"] ;
  "d0f29"->"5d9a0"  ;
  "0a742"->"5d9a0"  ;
  "f80d2" [label="f80d2\nremotes/svn-2/trunk"] ;
  "05eb1"->"f80d2"  ;
  "5d9a0"->"f80d2"  ;
  "b8bf1" [label="b8bf1"] ;
  "09393" [label="09393"] ;
  "8536f"->"09393" [style="dotted"] ;
  "05eb1" [label="05eb1\nsvn-2-orig"] ;
  "e0772"->"05eb1"  ;
  "67446" [label="67446"] ;
  "05eb1"->"67446"  ;
  "d0f29" [label="d0f29\nmaster\nsvn-1-orig"] ;
  "09393"->"d0f29"  ;
  "a5cf3" [label="a5cf3"] ;
  "d0f29"->"a5cf3"  ;
  "17156" [label="17156"] ;
  "7b397"->"17156"  ;
  "2379d" [label="2379d\nsvn-1"] ;
  "c3ff2"->"2379d"  ;
  "5d9a0"->"2379d"  ;
  "0a742" [label="0a742"] ;
  "67446"->"0a742" [style="dotted"] ;
  "c3ff2" [label="c3ff2"] ;
  "a5cf3"->"c3ff2" [style="dotted"] ;
  "7b397" [label="7b397"] ;
  "e0772" [label="e0772"] ;
  "17156"->"e0772" [style="dotted"] ;
}
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]