Hi John,<br><br>Have you looked at git-new-workdir?  I use it, and it works great for me.  It allows you to have multiple directories that share the same .git repo folder.  It is a little tricker to setup with VTK submodule, but it can be done.  So you would create new workdirs for each topic branch.  Then you could do this:<br>
<br>cd $workbranch<br>... make a bug fix on your working branch, changes uncommitted ...<br>git stash<br><br>cd $topicX<br>git stash apply<br>git commit -a -m &quot;bug fix on topic x&quot;<br><br>cd $workbranch<br>git merge topicx<br>
<br>It&#39;s like having two local clones, but you don&#39;t have to fetch from them, they always share the same repo information.  As soon as you make a change in one, it is visible in the other.  If you did this, you wouldn&#39;t need multiple build directories.  But it would still be a good idea to have multiple build directories so that you can test the bugfix on topicx, since you developed the bugfix in workbranch, it&#39;s possible it contains code that won&#39;t compile in topicx.<br>
<br><br>Can I also recommend that you stop doing octopus merge?  Just think of kitware/maser as another topic branch.  So for example, let&#39;s say you were starting from a clean checkout of kitware/master.  You&#39;d create these new branches:<br>
<br>git checkout -b development<br>git checkout -b topic-a<br>git checkout -b topic-b<br><br>Whenever you add new commits to topic-a, topic-b, or fetch new commits from kitware/master, merge the branch with the new commits into the development branch.  The development branch should contain only merge commits, merges coming from topic-a, topic-b, and kitware/master.<br>
<br>I also recommend you read about git rerere if you haven&#39;t already added that tool to your arsenal.  It can really help with the merges!<br><br>Pat<br><br><br><div class="gmail_quote">On Fri, Feb 11, 2011 at 6:04 AM, Biddiscombe, John A. <span dir="ltr">&lt;<a href="mailto:biddisco@cscs.ch">biddisco@cscs.ch</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">David,<br>
<br>
OK, two clones locally is one thing I&#39;ve been playing with, with judicious cut&#39;n&#39;paste activity, things are ok, but it seems like a &#39;suboptimal&#39; solution.  (I&#39;m not having two builds on the local machine though, instead I&#39;m using the one that does the nightly builds as my &#39;testspace&#39;).<br>

<br>
My ideal solution would be to &#39;commit to topic_x&#39;, I understand that this isn&#39;t possible with git (as it stands), because when a merge took place it&#39;d need to change the working tree index (and if the merge failed...), the index of the working tree would be knackered, but there must be a large % of cases when commit to branch X would work fine and there are no merge issues, so somehow git ought to be able to manage it. I wonder if this is under development. anyway...<br>

<br>
If there are better ways than two trees and two builds, I&#39;d like to know.<br>
<br>
JB<br>
PS. you must be working all night in order to reply so fast.<br>
<div><div></div><div class="h5"><br>
-----Original Message-----<br>
From: Thompson, David C [mailto:<a href="mailto:dcthomp@sandia.gov">dcthomp@sandia.gov</a>]<br>
Sent: 11 February 2011 10:36<br>
To: Biddiscombe, John A.; <a href="mailto:paraview-developers@paraview.org">paraview-developers@paraview.org</a><br>
Subject: RE: Branchmaster OctoPapa and the irrresistable urge to merge<br>
<br>
Hi John,<br>
<br>
I&#39;m not sure my (c) is better than your (a) or (b), but what I&#39;ve found myself doing recently is keeping 2 clones around: one named devel and one named boogs (sorry for the oblique reference to bugzilla&#39;s &quot;zarro boogs found&quot;). And that means 2 build directories. But it does make life easy when I want to commit a fix to master without switching back and forth. I&#39;ve even been toying with the idea of having boogs do an automatic pull and build via cron while I&#39;m asleep to keep it up to date.<br>

<br>
    David<br>
________________________________________<br>
From: <a href="mailto:paraview-developers-bounces@paraview.org">paraview-developers-bounces@paraview.org</a> [<a href="mailto:paraview-developers-bounces@paraview.org">paraview-developers-bounces@paraview.org</a>] On Behalf Of Biddiscombe, John A. [<a href="mailto:biddisco@cscs.ch">biddisco@cscs.ch</a>]<br>

Sent: Friday, February 11, 2011 00:28<br>
To: <a href="mailto:paraview-developers@paraview.org">paraview-developers@paraview.org</a><br>
Subject: [Paraview-developers] Branchmaster OctoPapa and the irrresistable urge to merge<br>
<br>
I have 5 or 6 topic branches locally and I am having a bit of trouble managing the workflow, so since you guys made me use git (which is bloody marvellous, I&#39;m not complaining), I am asking for advice.<br>
<br>
Whenever I update from kitware, I do an update of my main master branch (=clean kitware/master) and then do an octopus merge of the 5 topic branches into my working branch. All is fine.<br>
<br>
Now I discover a bug or add some new tweak and I need to commit the fix to branch X: the problem comes here<br>
I am in working branch, which is based off kitware/master<br>
git checkout topic X<br>
topic X is based off kitware/master, several weeks ago so when I &quot;git checkout topic X&quot;, lots of files in my working dir get touched<br>
commit fix to branch X<br>
git checkout jbworking<br>
<br>
Now when I make my project, cmake reruns, tons of files are touched and I spend large portions of my life waiting for things to rebuild when I don&#39;t need them to.<br>
<br>
It seems I can process in one of two ways<br>
a) Update topic branches whenever I update my kitware master, so that switching to topic X only touches those files on topic branches Y,Z,A,B,C etc, which is a small subset and rebuilds are less painful.<br>
pro : everything up to date, so switching branches should minimize rebuilds<br>
con : I read that we must resist the &quot;urge to merge&quot;, because it is bad. I&#39;m not really sure why, so please tell me. Ideally I would rebase each topic branch when I an update from kitware/master to keep things clean, unfortunately, I push these topic branches to our local repo server so rebasing is not allowed.<br>

<br>
b) make my fixes in the working branch and commit them to the working branch, then cherry pick them regularly to each topic branch and throw away the working branch whenever I do a kitware update.<br>
pro : Sensible way to approach things and keeps it fairly simple<br>
con : I carry on work most evenings on the laptop and may not be ready to cherry pick fixes to the topic branches and push them. I could pull from the desktop to the laptop, but then I have to maintain another level of synchronization between machines which I guess there&#39;s no way to avoid.<br>

<br>
Anyway, the internet is too big and I can&#39;t read all the blogs about branch management. All of them say to do<br>
a) stash changes, switch branch to topic, commit fixes, switch back - but these people don&#39;t work on projects as big as paraview and if you touch vtkObject.h in one topic branch, you&#39;re really stuffed because everything gets rebuilt, so I have to go b).<br>

<br>
Please tell me what I should do - I am erring towards b). [Until recently, I just had one huge messy branch with everything on and it was a disaster, (it was a git clone of my old personal paraview svn repo), all commits were mixed up together, now I created clean topic branches and want advice].<br>

<br>
(I hope there is a &#39;c&#39; option which simply allows me to commit a fix to branch Y when I&#39;m still on the working branch, but I have not found this yet)<br>
<br>
Yours<br>
<br>
JB<br>
<br>
<br>
--<br>
John Biddiscombe,                            email:biddisco @ <a href="http://cscs.ch" target="_blank">cscs.ch</a><br>
<a href="http://www.cscs.ch/" target="_blank">http://www.cscs.ch/</a><br>
CSCS, Swiss National Supercomputing Centre  | Tel:  +41 (91) 610.82.07<br>
Via Cantonale, 6928 Manno, Switzerland      | Fax:  +41 (91) 610.82.82<br>
<br>
_______________________________________________<br>
Paraview-developers mailing list<br>
<a href="mailto:Paraview-developers@paraview.org">Paraview-developers@paraview.org</a><br>
<a href="http://public.kitware.com/mailman/listinfo/paraview-developers" target="_blank">http://public.kitware.com/mailman/listinfo/paraview-developers</a><br>
<br>
<br>
_______________________________________________<br>
Paraview-developers mailing list<br>
<a href="mailto:Paraview-developers@paraview.org">Paraview-developers@paraview.org</a><br>
<a href="http://public.kitware.com/mailman/listinfo/paraview-developers" target="_blank">http://public.kitware.com/mailman/listinfo/paraview-developers</a><br>
</div></div></blockquote></div><br>