[petsc-dev] [petsc-users] petsc git next branch *is* unwound!
Satish Balay
balay at mcs.anl.gov
Sat Oct 11 00:34:20 CDT 2014
On Fri, 10 Oct 2014, Dave Nystrom wrote:
> Thanks for your detailed reply. Suppose I start working with wdn_mods_master
> instead of wdn_mods_next where wdn_mods_master is master + my local changes
> to master. Now, suppose I find a bug which I report. With the current petsc
> workflow, it seems like that bug would get fixed on next and then merged to
> master after some amount of time. Is that correct?
Nope - the bug is fixed in a corresponding 'feature' branch [where the
bug was originally introduced] or a new 'bug-fix' branch [created off
latest master/maint] or directly in master/maint (if we think its a
trivial fix that wont' break stuff). And then this branch is merged to
next for further testing.
Note: We don't develop (or make direct commits) on 'next'. It is an
integration branch where feature/bugfix branches are merged into - and
from where nightly tests are done. We find bugs with this testing - or
we realize (very rarely) some of these feature branches won't graduate
and make it to master [or need to be redone]. Hence its discard after
every release.
You are correct in the sense that most branches [sometimes bugfixes]
have to stay in next for some time - before they get merged to
master. And this 'time' 1 day or more [due to the way some of this
testing is done - party the shedule - partly the amount of testing -
and partly how we manually interpret test results and match them with
these branches]
> If so, then I have to
> wait for that amount of time before I can have the fix. Or I would need to
> figure out how to pull it into my wdn_mods_master from next.
You can temporarily switch to the 'bug-fix' branch and use it - or
merge it [but then be prepared to revert it - if this branch is
rebased or discarded]. Yeah - its not ideal. But one of the points of
git is to use/discard branches as you need. [trying to stick to one
branch to track multi-branch development can be difficult]
> And then most of the petsc features I am most interested in show up in next
> before master - like the stuff with cuda, threads and ViennaCL, etc. So I'm
> not sure how to really dispense with my use of and reliance on next. But I
> will give it more thought.
Yes - next is where the features show up first. But thats different
then 'use next for bugfixes' - as 'next' is likely to have more new
bugs [due to these new features] than bugfixes.
> And I will study the details of your reply below and see if I can upgrade my
> git skills. But I've never had to use the rebase, reset or cherry picking
> features of git before. So it will take take some study.
And based on the issue you are having with 'git reset --hard next'
(the 'next' part - not the 'git reset' part) - an understanding of git
branches is perhaps needed. Without it - its not easy to use git [or
communicate about it]
for eg:
- understaning origin/branchname vs branchname [and how fetch/pull
(and other basic operations) differ on origin/branchname vs
branchname
- use of commit-id vs branchname in various git commands
- branchname vs tag
- what is a 'new branch' - and what does 'delete branch' mean
etc..
Satish
>
> Satish Balay writes:
> > I believe the workflow used by petsc is same as what most projects
> > with git do - so there is nothing special about it.
> >
> > Try 'man gitworkflows'
>
> I'll check this out.
>
> > I think your reason for using next is flawed (you get more bugs than
> > bugfixes on next - as its an integration branch - and features are
> > merged here for testing purposes). But if thats what you want to do -
> > thats fine. We can benefit with the extra testing that you are now
> > providing on next. And I believe git gives you tools to manage
> > whatever workflow you choose.
> >
> > Generally we don't branch off next. New branches are created from
> > master (or maint). This works well for new features workflow (or bug
> > fix workflow).
> >
> > In your case - you'd like to maintain 'wdn_mods_next' branch - which
> > is 'next' + local fixes that are specific to next (and not shared
> > across other branches - like master). And these fixes are next
> > specific - hence you want this branch to start off next. Presumably
> > this is low over head stuff - and don't need permanant history for
> > this (as we usually do with feature branches)
>
> It is low over head and I don't need a permanent history of petsc changes.
>
> > For the above requirement - currently you do:
> >
> > a. branch wdn_mods_next from next
> > b. add local commits in this branch
> > c. merge latest next into wdn_mods_next. (as needed)
>
> Right.
>
> > Alternative is to use 'git rebase' to manage your local commits. This
> > is not critical - but it lets you keep track of them more sanely.
> >
> > <rebase local commits over latest next>
> > git checkout next
> > git pull
> > git checkout wdn_mods_next
> > git rebase next
> >
> > [also check 'git rebase -i']
>
> OK, I don't really know what rebase does - so I will have to study the
> documentation and my git book.
>
> > In the present situation - when next is unwound - you have to unwind
> > and recreate wdn_mods_next. For this you'd like to extract your
> > current modifications from wdn_mods_next - and apply to a new
> > wdn_mods_next branch.
> >
> > <First step is to backup current wdn_mods_next. i.e:>
> > git checkout wdn_mods_next
> > git checkout -b wdn_mods_next-oct-2014
> >
> > <Now reset wdn_mods_next to current next>
> > git checkout wdn_mods_next
> > git reset --hard next # assuming you've already reset 'next' to latest
>
> At the moment, I'm not sure the above git reset command will work - based on
> trying it and getting a git error message.
>
> > <check previous local modifications>
> > git log origin/next-oct-2014..wdn_mods_next-oct-2014
> > git diff origin/next-oct-2014..wdn_mods_next-oct-2014
> >
> > Now you can 'git cherrypick' the commits you need [from the above
> > list] or grab the above diff - and apply to dn_mods_next(new) branch. for eg:
> >
> > git diff origin/next-oct-2014..wdn_mods_next-oct-2014 > my_changes
> > patch -Np1 < my_changes
> > <resolve patch conflicts manually>
> > git commit
>
> This seems like a complicated procedure but maybe it will seem simpler and
> more intuitive if I study this more.
>
> Thanks,
>
> Dave
>
> > Satish
> >
> > On Fri, 10 Oct 2014, Nystrom, William David wrote:
> >
> > > Jed,
> > >
> > > I don't think your reply below really does what I want to do. My wdn_mods_next branch is
> > > a branch that I maintain that was derived from the next branch. I do not merge changes
> > > from wdn_mods_next into the next branch. The next branch is supposed to be a mirror of
> > > the official petsc next branch and I only update the next branch in my petsc clones by first
> > > performing a "git remote -v update origin" in my bare mirror repo which mirrors the petsc maint,
> > > master and next branches as well as containing any additional branches that I create.
> > >
> > > So, I update wdn_mods_next from the latest copy of next that I have by using the following
> > > command:
> > >
> > > git pull origin next
> > >
> > > in the petsc directory where I have wdn_mods_next checked out. Generally this is easy and
> > > has no conflicts to resolve but on a rare occasion, I might have to resolve a conflict. This is
> > > because my wdn_mods_next branch does not differ much from next - just a few hacks I have
> > > had to resort to.
> > >
> > > So here is one way I think I could accomplish my goal. In my bare, mirror repo execute
> > >
> > > git remote -v update origin
> > >
> > > At this point my bare mirror repo now has a copy of the new unwound next branch - if I am
> > > understanding correctly.
> > >
> > > Then in a clone of my mirror repo execute
> > >
> > > git checkout wdn_mods_next
> > > git reset --hard next
> > > git push origin +wdn_mods_next
> > >
> > > If I understand correctly, then my wdn_mods_next branch would be identical to the next
> > > branch and I would not have the changes I made to next that resulted in wdn_mods_next.
> > >
> > > Then I could untar a file of those changes on top of my clone with wdn_mods_next checked
> > > out and recommit those changes. This is about half a dozen files. But this seems like a
> > > hacky way to do business that is only reasonable because I have a small number of files.
> > >
> > > Isn't there a better way to do this?
> > >
> > > Perhaps you or Satish might ask why I am using next instead of master. The reason is that
> > > I am forever uncovering some bug in petsc that you guys fix on the next branch and I don't
> > > want to wait for several days before it gets pulled into master and I can resume productive
> > > work.
> > >
> > > So maybe there is some flaw or weakness in my git work flow. I have been using git for
> > > several years now but am not a power user. I like git but do not really want to have to
> > > become a git guru. However, this petsc policy of periodically unwinding the next branch
> > > seems to always disrupt my workflow - so I have not found a robust way to deal with it
> > > yet.
> > >
> > > Dave
> > >
> > > ________________________________________
> > > From: Jed Brown [jed at jedbrown.org]
> > > Sent: Thursday, October 02, 2014 4:39 PM
> > > To: Satish Balay; Nystrom, William David
> > > Cc: petsc-users; petsc-dev at mcs.anl.gov
> > > Subject: Re: [petsc-dev] [petsc-users] petsc git next branch *is* unwound!
> > >
> > > Satish Balay <balay at mcs.anl.gov> writes:
> > >
> > > > You would have to delete both 'next' and 'wdn_mods_next' branches from
> > > > all your clones - and recreate them.
> > >
> > > Do your normal "git remote update" (or git fetch) in your "master" clone
> > > (confusing to use the same name to refer to a repository and a branch).
> > > I'll call the repository Mirror. Anyway, you should see that all three
> > > branches are updated. 'maint' and 'master' should fast-forward, while
> > > 'next' will say "forced update".
> > >
> > > After that, recreate 'next' on the clones just like in Satish's original
> > > email.
> > >
>
More information about the petsc-dev
mailing list