Re: git-svn and repository hierarchy?

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

 



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

[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]

  Powered by Linux