Mercurial > evolve
changeset 2014:cd6d32a0155c
tutorial: add a second part about having multiple topic
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Fri, 30 Sep 2016 18:21:50 +0200 |
parents | 2e8e4619a240 |
children | 6fbc654b42b2 |
files | tests/test-topic-tutorial.t |
diffstat | 1 files changed, 157 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/test-topic-tutorial.t Thu Sep 29 16:48:13 2016 +0200 +++ b/tests/test-topic-tutorial.t Fri Sep 30 18:21:50 2016 +0200 @@ -309,3 +309,160 @@ $ hg up default 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + +Working with Multiple Topics +============================ + +In the above example, topic are not bring much benefit since you only have one +line of developement. Topic start to be more useful when you have to work on +multiple features are the same time. + +We might go shopping in a hardware store in the same go, so let's add some +tools to the shopping list withing a new topic:: + + $ hg topic tools + $ echo hammer >> shopping + $ hg ci -m 'Adding hammer' + $ echo saw >> shopping + $ hg ci -m 'Adding saw' + $ echo drill >> shopping + $ hg ci -m 'Adding drill' + +But are not sure to actually go in the hardward store, so in the meantime, we +want to extend the list with drinks. We go back to the official default branch +and start a new topic:: + + $ hg up default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg topic drinks + $ echo 'apple juice' >> shopping + $ hg ci -m 'Adding apple juice' + $ echo 'orange juice' >> shopping + $ hg ci -m 'Adding orange juice' + +We now have two topics:: + + $ hg topic + * drinks + tools + +The information ``hg stack`` command adapt to the active topic:: + + $ hg stack + ### topic: drinks + ### branch: default + t2@ Adding orange juice (current) + t1: Adding apple juice + ^ adding fruits + $ hg up tools + switching to topic tools + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg stack + ### topic: tools + ### branch: default + t3@ Adding drill (current) + t2: Adding saw + t1: Adding hammer + ^ adding fruits + +They are seen as independant branch by Mercurial. No rebase or merge betwen them will be attempted by default:: + + $ hg rebase + nothing to rebase + [1] + +.. server activity:: + + $ cd ../server + $ hg up + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ mv shopping foo + $ echo 'Coat' > shopping + $ cat foo >> shopping + $ hg ci -m 'add a coat' + $ echo 'Coat' > shopping + $ echo 'Shoes' >> shopping + $ cat foo >> shopping + $ hg rm foo + not removing foo: file is untracked + [1] + $ hg ci -m 'add a pair of shoes' + $ cd ../client + +Lets see what other people did in the mean time:: + + $ hg pull + pulling from $TESTTMP/server + searching for changes + adding changesets + adding manifests + adding file changes + added 2 changesets with 2 changes to 1 files (+1 heads) + (run 'hg heads' to see heads) + +There is new changes! We can simply use ``hg rebase`` to update our changeset on top of the latest:: + + $ hg rebase + rebasing 6:183984ef46d1 "Adding hammer" + merging shopping + rebasing 7:cffff85af537 "Adding saw" + merging shopping + rebasing 8:34255b455dac "Adding drill" + merging shopping + +But what about the other topic? You can use 'hg topic --verbose' to see information about them:: + + $ hg topic --verbose + drinks (on branch: default, 2 changesets, 2 behind) + tools (on branch: default, 3 changesets) + +The "2 behind" is telling you that there is 2 new changesets on the named branch of the topic. You need to merge or rebase to incorporate them. + +Pushing that topic would create a new heads will be prevented:: + + $ hg push --rev drinks + pushing to $TESTTMP/server + searching for changes + abort: push creates new remote head 70dfa201ed73! + (merge or see 'hg help push' for details about pushing new heads) + [255] + + +Even after a rebase Pushing all active topics at the same time will complains about the multiple heads it would create on that branch:: + + $ hg rebase -b drinks + rebasing 9:8dfa45bd5e0c "Adding apple juice" + merging shopping + rebasing 10:70dfa201ed73 "Adding orange juice" + merging shopping + switching to topic tools + $ hg push + pushing to $TESTTMP/server + searching for changes + abort: push creates new remote head 4cd7c1591a67! + (merge or see 'hg help push' for details about pushing new heads) + [255] + +Publishing only one of them is allowed (as long as it does not create a new branch head has we just saw in the previous case):: + + $ hg push -r drinks + pushing to $TESTTMP/server + searching for changes + adding changesets + adding manifests + adding file changes + added 2 changesets with 2 changes to 1 files + 2 new obsolescence markers + +The publishing topic has now vanished, and the one still draft is now marked as "behind":: + + $ hg topic --verbose + * tools (on branch: default, 3 changesets, 2 behind) + $ hg stack + ### topic: tools + ### branch: default, 2 behind + t3@ Adding drill (current) + t2: Adding saw + t1: Adding hammer + ^ add a pair of shoes +