[Rivet] HG transition

Frank Siegert frank.siegert at cern.ch
Fri Jun 14 11:10:45 BST 2013


Argh, sorry -- I think I've done something stupid.

I committed some small changes locally, then did a pull/merge/commit,
and then pushed in the assumption that my small changes are then being
pushed. But if I look at the diff:

  hg diff -c08fb5598e16e

then there is a lot more stuff in it than expected, probably from the merge?

What did I do wrong here? I hope there's a way to fix it...

Cheers,
Frank


On 11 June 2013 12:01, Frank Siegert <frank.siegert at cern.ch> wrote:
> Ok, this is on https://rivet.hepforge.org/trac/wiki/GettingStartedForDevelopers
> now, feel free to amend/improve.
> Thanks again to David for the explanations!
>
> Frank
>
>
> On 10 June 2013 18:09, Frank Siegert <frank.siegert at cern.ch> wrote:
>> Thanks, David!
>>
>> These clarifications are very useful since I have so far not used a
>> distributed version control system. Do you want me to add these to
>> GettingStartedForDevelopers (together with a link to hginit.com)?
>>
>> Cheers,
>> Frank
>>
>>
>> On 10 June 2013 00:03, David Grellscheid <david.grellscheid at durham.ac.uk> wrote:
>>> Hi Frank,
>>>
>>>>> New features should _not_ get added there, instead development happens
>>>>
>>>>
>>>> I'm confused now. I thought if I want to add a new analysis I would
>>>> simply clone that "trunk", implement my changes locally (potentially
>>>> with intermediate local commits) and when I'm finished pull and merge
>>>> any updates and then push my stuff back.
>>>
>>>
>>> Correct. With "features" I meant structural changes to the core of Rivet.
>>> New analyses that are completely standalone are OK direct to trunk with the
>>> workflow you describe. If you need to coordinate with another author, you
>>> could push to a temporary branch in 'private' first.
>>>
>>>> Maybe just for clarification if I misunderstood the workflow, or as a
>>>> basis for the wiki page:
>>>>
>>>> (0. Clone the repo -- just once at the beginning)
>>>> $ hg clone ssh://login.hepforge.org//hepforge/hg/rivet/public/rivet
>>>> $ cd rivet
>>>
>>>
>>> Yes. The path is automatically encoded in rivet/.hg/hgrc as "default =
>>> ssh://login.hepforge.org//hepforge/hg/rivet/public/rivet",
>>> so that pull/push operations do not need an explicit destination.
>>>
>>>>
>>>> 1. Implement one new feature
>>>> $ hg pull
>>>> $ hg update
>>>> $   # develop first part of change
>>>> $ hg commit -m "first part of my change"
>>>> $   # develop second part of change
>>>> $ hg commit -m "second part of my change"
>>>
>>>
>>> Yes.
>>>
>>>>
>>>> 2. Get updates from central repo
>>>> $ hg pull
>>>> $ hg merge
>>>> $ hg commit -m "merge"
>>>>
>>>
>>> Yes.
>>>
>>>> 3. Push to central repo
>>>> $ hg push
>>>
>>>
>>> Correct. Push/pull can come from any repo path. You can either explicitly
>>> specify the target, or use shortcuts that you can add by hand to .hg/hgrc.
>>> This is useful when you're on a branch and want to track trunk as the branch
>>> develops. hgrc would then have
>>>
>>> [paths]
>>> default = ..../branchrepo
>>> trunk = ..../trunkrepo
>>>
>>> Then you can regularly do
>>>
>>> 4. Track trunk in branch repo
>>> hg pull trunk
>>> hg merge
>>> hg ci -m'merge'
>>> hg push  # implies "default"
>>>
>>> This keeps 'branch' up-to-date with developments on trunk.
>>>
>>>>> on individual branches in
>>>>>
>>>>> hg clone ssh://login.hepforge.org//hepforge/hg/yoda/private/...
>>>>> hg clone ssh://login.hepforge.org//hepforge/hg/rivet/private/...
>>>>
>>>>
>>>> How does one create such a private branch (or is it called
>>>> repository)?
>>>
>>> They're all separate repositories. Even your hg clone makes a new repo, and
>>> they are all equal. commit/update talks to the repo underneath your working
>>> dir, while pull/push coordinates with other repo clones.
>>>
>>> The most space-efficient way to create private clones on hepforge is to ssh
>>> into login.hepforge.org, then do the following (clone on the local
>>> filesystem uses hardlinking as long as files are unchanged):
>>>
>>> 5. Create new branch repo in hepforge
>>> umask 002
>>> cd /hepforge/hg/rivet/
>>> hg clone public/rivet private/foobar
>>>
>>> In principle, one can also clone via ssh to a new location in private, but
>>> then without the space savings.
>>>
>>>> And how are they merged back into the mainline?
>>>
>>> Just as above, but you push to trunk instead of default:
>>>
>>> 6. Merge branch repo back to trunk
>>> cd privaterepo-workdir
>>> hg pull trunk
>>> hg merge
>>> hg ci -m'merged'
>>> hg out trunk # check what will be pushed, maybe use -r to select
>>> hg push trunk # be SURE of this, it's hard to undo, -r applies here, too
>>>         ^^^^^
>>>
>>> Once you understand the difference between (2.), (4.) and (6.), you've got
>>> it! You can create a couple of local clones on your own machine and
>>> experiment with all the different features. I also found http://hginit.com/
>>> very useful.
>>>
>>> See you,
>>>
>>>   David


More information about the Rivet mailing list