Josef Wolf venit, vidit, dixit 27.02.2009 18:12: > On Wed, Feb 25, 2009 at 10:26:10AM +0100, Michael J Gruber wrote: >> Josef Wolf venit, vidit, dixit 24.02.2009 23:34: > >>> I have set up a repository hierarchy like this: >>> >>> >>> subversion-repos >>> | >>> git-svn-repos >>> / | \ >>> clone1 clone2 clone3 >> Recent enough git should even warn you against doing that, "that" being >> pushing into checked out branches. > > I've now tried to synchronize via pull instead of push, but I still > get conflicts. > >> Your diagram above is missing important info, namely which branches you >> are pushing into. But the problem indicates that you are pushing into a >> checked out branch. > > In order to get a better understanding what's going on, I've written a > small script which can be copy-pasted into some terminal window: > > ( > set -ex > > # create test directory > # > TESTDIR=`mktemp --tmpdir=. git-svn-hierarchy-test-XXXXXXXX` > rm -rf $TESTDIR > mkdir -p $TESTDIR > cd $TESTDIR > > SUBVERSION_REPOS=file://`pwd`/subversion-repos > > # create subversion repos with some history > # > svnadmin create subversion-repos > svn -m "create standard layout" mkdir \ > $SUBVERSION_REPOS/trunk \ > $SUBVERSION_REPOS/branches \ > $SUBVERSION_REPOS/tags > svn co $SUBVERSION_REPOS/trunk subversion-wc > echo change1 >>subversion-wc/test > svn add subversion-wc/test > svn ci -m "commit 1" subversion-wc > > # create git-svn-repos > # > git svn init --stdlayout $SUBVERSION_REPOS git-svn-repos > (cd git-svn-repos; git svn fetch) > > # create a clone and do some work on it > # > git clone git-svn-repos clone1 > for i in 2 3 4; do > ( cd clone1; echo change$i >>test ; git commit -a -m "commit $i") > done > > (cd git-svn-repos; git pull ../clone1) Gives you 1-2-3-4 > (cd git-svn-repos; git svn rebase) Does nothing here (but is good practice) > (cd git-svn-repos; git svn dcommit) Creates 2-3-4 on the svn side. *Then rebases* your master, which creates 1-2'-3'-4' on master. Note that 2 is different from 2' (git-svn id). > (cd git-svn-repos; git pull ../clone1) # if this line is executed, That's the problem. This creates a merge after which you 1-2-3-4 and 1-2'-3'-4' plus the merge of 4 and 4'. Instead, use git pull --rebase here. You don't want merges in the branch from which you dcommit. Borrowing from some other vcs: Repeat the soothing mantra: a merge is no merge is no merge - it it's in svn ;) > (cd git-svn-repos; git svn rebase) # this command gives the conflict > ) > > When I comment out the second "git pull ../clone1", the conflict does > not happen on the last "git svn rebase", but on some later pull, rebase > or dcommit command. > > Obviously, I'm doing something wrong. But I can't figure what. Any hints? I guess when we said integrated we should have said rebase. Haven't we? Cheers, Michael -- 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