[Numpy-discussion] DVCS at PyCon

Martin Geisler mg at lazybytes.net
Mon Apr 13 03:21:45 EDT 2009


Stéfan van der Walt <stefan at sun.ac.za> writes:

> Hi Martin
>
> 2009/4/13 Martin Geisler <mg at lazybytes.net>:
>> In Mercurial it creates a *named
>> branch*, which are imbedded in the history and are used for long-term
>> development branches. Names of Git branches are not recorded in the
>> history and are thus well-suited for local experiments.
>
> [...]
>
>> The bookmarks extension let you assign names to the heads, it is
>> inspired by the way Git branches work. Unfortunately the bookmarks are
>> not yet transferred over the network when you do push/pull, but this is
>> of course a planned feature.
>
> Thanks for the info. Maybe you can also help me out with the following
> questions: I'd like to know how to duplicate git's branch workflow in
> Mercurial.
>
> - How do you create a new head when you are working on top of the
> current head? Do you have to make a dummy commit and then commit on
> top of (TIP - 1) whenever you need a new "branch"?

Yeah, you can create multiple heads like that. In general, let's say the
current tip of the tree is T:

  ... --- T

You've just cloned this tree from the Numpy server. To make your head
you will just do a commit:

  ... --- T --- S

In Mercurial there is no notion of "my head" and "your head" and
(Git-style) branches are just implicitly made from how the changeset
graph develops. So if I have also started from T and made a commit my
tree will look like this:

  ... --- T --- M

and so far neither of us knows about the other guys branch. We can both
tell that we've done something by using 'hg outgoing', which will tell
you that the S changeset is missing at Numpy, and tell me that the M
changeset is missing.

Now imagine I push my change to Numpy -- if you do 'hg incoming' you'll
see that there is a missing changeset, and if you do 'hg pull' your tree
will end up like this:

            S
           /
  ... --- T
           \
            M

The files in your working copy will still be at the S changeset ('hg
parents' will say S), but you can now see that your changeset has
created a branch with regard to the Numpy repository.

But you can continue working and make U, V, etc:

            S --- U --- V
           /
  ... --- T
           \
            M

In the mean time I might commit N and O to my tree:

  ... --- T --- M --- N --- O

and push this to Numpy. If you pull from Numpy you'll now see

            S --- U --- V
           /
  ... --- T
           \
            M --- N --- O

At some point you can decide to merge your branch into the main branch
and get a merge changeset X:

            S --- U --- V
           /             \
  ... --- T               X
           \             /
            M --- N---- O

> - Is it possible to remove a head without merging it, discarding the
> children?

Or your can decide to forget about your branch by making a local clone
where you only ask for the O head:

  hg clone -r O repo repo-with-O

The new repo-with-O clone will look like this:

  ... --- T --- M --- N --- O

i.e., it will be exactly like what's on Numpy at this point in time.

The strip command from the mq extension gives an alternative way to do
this from within a single clone:

  hg strip -r S

will remove S and all child changesets, i.e., S, U, V and the result
will again be exactly what is on Numpy.

-- 
Martin Geisler

VIFF (Virtual Ideal Functionality Framework) brings easy and efficient
SMPC (Secure Multiparty Computation) to Python. See: http://viff.dk/.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20090413/70b2fdb0/attachment.sig>


More information about the NumPy-Discussion mailing list