Mike, Why not then just rename master to develop? people can still commit to it. We don't need to have a branch named master and we can name any branch so. in line with the gitflow article we could fork master of off 4.4...
On Wed, Jul 23, 2014 at 6:13 PM, Mike Tutkowski <mike.tutkow...@solidfire.com> wrote: > To start this all off, what about making a new branch call 'develop' off of > 'master'? People can continue to commit to 'develop' as needed (as they > were doing previously to 'master'), but only cherry pick well-tested > features into 'master'. > > I know 'master' might not be currently in a shippable state (or maybe it > is), but we can allow it to slowly make such a transition during the 4.5 > release and then keep it in a shippable going forward. > > > On Wed, Jul 23, 2014 at 9:51 AM, Sebastien Goasguen <run...@gmail.com> > wrote: > >> >> On Jul 23, 2014, at 11:38 AM, daan Hoogland <daan.hoogl...@gmail.com> >> wrote: >> >> > Sebastien, >> > >> > It seems we can do what you are calling for is creating a branch >> > called 'release'. We can merge back into that branch from 4.4, master, >> > 4.3. I would like to see people that want a feature or bug fix in a >> > branch make a fork of that branch and when that fork is working do a >> > cherry-pick. The -forward concept is now used for that but it is >> > broken because more then for one piece of work there are commits on >> > it. This caused me conflicts during the release. Especially painfull >> > as not all was intended to get into the release. We can create this >> > 'release' branch now on the basis of 4.4 and start pulling in changes. >> >> Yes, that's what I am thinking about too, so +1 >> >> Our master would become the -develop- in gitflow terms >> The release branch you mention would become the -master- in gitflow terms >> >> If we start now, indeed we can create 'release' from 4.4 release tag >> (voted and shipped). >> >> That means that to create 4.5 we will need to merge features back into >> 'release'. it might be messy because some of those features are already in >> our current master. >> >> But all of this will keep 'release' clean (we can keep track of bugs and >> features that are in it in CHANGES file etc..) >> >> >> > There is a question of control. Do we allow all committers to manage >> > the release? I am for that but can imagine not everybody is. >> > >> >> At first I would say that only the RM can commit to 'release'. As we get >> the CI in place we could relax this and allow commits that pass the CI to >> get into 'release', but right now I would vote for a tighter control of >> 'release'. >> >> > rule number 1 will be: you are going to do something to the code, you >> > start by creating a branch. >> > >> > right? >> > >> > On Wed, Jul 23, 2014 at 5:28 PM, Sebastien Goasguen <run...@gmail.com> >> wrote: >> >> >> >> On Jul 23, 2014, at 11:19 AM, Sam Schmit <sam.sch...@appcore.com> >> wrote: >> >> >> >>> Hey everyone, >> >>> >> >>> I've been a developer for a handful of years and have had my share of >> >>> experience with different version control systems. I've used (for >> better >> >>> or worse) Git, Perforce, Rational ClearCast, and SVN. >> >>> >> >>> Each of these solutions offers their own unique set of features, >> strengths >> >>> and weaknesses. As there are so many systems that are good at specific >> >>> things, it seems best to use the features that the chosen system is >> best at. >> >>> >> >>> Git is great at branching, merging and using that structure to >> maintain and >> >>> control how changes get into the primary branches. Git tools even make >> >>> this easy by integrating directly into the "Gitflow" to make branching >> and >> >>> merging that much easier. It would seem counter-intuitive to NOT make >> use >> >>> of these built-in capabilities. >> >>> >> >>> In addition to that, I know that the current method of change >> management is >> >>> incredibly frustrating to work with, and works directly against the >> way a >> >>> typical Git user would expect it to be structured. I should NEVER have >> >>> problem compiling and running something on master. I should not have >> >>> problems building anything on a release branch. A feature/bugfix >> branch is >> >>> where things can be, and often are, broken or unstable. There have >> been >> >>> many times working in Cloudstack where I've had to search for a stable >> >>> revision on master, and that's just plain wrong. >> >>> >> >>> I do realize that having this many developers working on so many >> features >> >>> and bugfixes will result in a large number of branches. I don't >> believe >> >>> this is a good argument against using a branching method, though - I >> >>> believe that the current system is even more confusing and difficult >> to use. >> >>> >> >>> I could pontificate on change management quite a bit more, but my >> opinion >> >>> in summary would basically be: use Git the way it was meant to be >> used, >> >>> and things will be better. Just my two cents. >> >>> >> >>> Sam >> >>> >> >>> >> >> >> >> Sam, I think we are in agreement (at least with folks who responded to >> this thread). >> >> Or maybe I am not reading your mail right and you don't agree with Leo ? >> >> >> >> My own take and reason for calling for a change we are currently doing >> things is mostly due to the way we release. >> >> >> >> I would like to see a stable master (and I think we are in agreement >> with that). >> >> That means that development should not happen on master and that every >> commit that lands on master should be shippable. >> >> >> >> I personally have no issues with cherry-picking. So I would be fine >> cherry picking from a hot-fix branch into master, to fix a bug. >> >> The end result is that the next commit on master would still mean >> master is shippable/releasable. >> >> >> >> If we agree with this basic concept. The question becomes how do we get >> there, considering that master is now full of dev work and potential bug. >> >> The only releasable product we have are on the 4.3, 4.4 and previous >> release branches. >> >> >> >> Ideally, I would like to see master becomes 4.4. And work our way back, >> merging the new features that are already in master into the new master >> (based on 4.4). >> >> This could be quite complicated but we need to do it (or something like >> it). >> >> >> >> To move forward, we should make a proposal to the list and call for a >> vote. >> >> >> >> Any takers to start a wiki page proposing a new git process and how we >> could move to it (transition path) ? >> >> >> >> >> >> -Sebastien >> >> >> >> >> >>> >> >>> On Wed, Jul 23, 2014 at 5:16 AM, Leo Simons < >> lsim...@schubergphilis.com> >> >>> wrote: >> >>> >> >>>> Hey folks, >> >>>> >> >>>> With 4.4.0 tagged, is now an opportune time to go and implement this? >> >>>> >> >>>> I would enthousiastically +1 and get crackin', but I’m not a >> committer so >> >>>> its not that practical for me to volunteer! >> >>>> >> >>>> I wanted to point out atlassian’s description of gitflow >> >>>> >> >>>> https://www.atlassian.com/git/workflows#!workflow-gitflow >> >>>> >> >>>> which might be easier to read. >> >>>> >> >>>> Similarly, the git-flow scripts that help out with implementing this >> stuff >> >>>> >> >>>> https://github.com/nvie/gitflow >> >>>> >> >>>> they also describe the relationship between gitflow and dealing with >> >>>> multiple remotes >> >>>> >> >>>> https://www.atlassian.com/git/workflows#!pull-request >> >>>> >> >>>> Finally note atlassian’s free sourcetree GUI has built-in support for >> >>>> git-flow >> >>>> >> >>>> http://www.sourcetreeapp.com/ >> >>>> >> >>>> Because cloudstack currently is full of rebasing and squashing and >> >>>> cherry-picking, you get very little benefit from a tree visualization >> tool >> >>>> (like this or gitk or ...) right now, but it would be *great* to have >> going >> >>>> forward. >> >>>> >> >>>> >> >>>> cheers, >> >>>> >> >>>> >> >>>> Leo >> >>>> >> >>>> On Jul 1, 2014, at 12:09 AM, Sebastien Goasguen <run...@gmail.com> >> wrote: >> >>>> >> >>>>> I would like to re-start this discussion. >> >>>>> >> >>>>> Rajani made some good points and someone mentioned Gitflow: >> >>>>> >> >>>>> http://nvie.com/posts/a-successful-git-branching-model/ >> >>>>> >> >>>>> Thinking about our release procedure, we clearly need more tests and >> a >> >>>> CI. However it looks like this is going to take some time. >> >>>>> >> >>>>> In the meantime I think there is nothing preventing us from agreeing >> to >> >>>> 'git practices', we don't need tests or new infra, we just need to >> agree on >> >>>> the git workflow. >> >>>>> >> >>>>> Right now Master is really a development branch, we should make it a >> >>>> stable branch for production with very few commits. >> >>>>> This does not mean that we would release less, in contrary this would >> >>>> ensure that a commit to master means it's a production release. >> >>>>> >> >>>>> In addition gitflow [1] does not do cherry-picks (gets back to >> Rajani's >> >>>> point) everything is based on merges. >> >>>>> >> >>>>> I am of the opinion that git flow provides a nice process. It >> basically >> >>>> freezes master. Development happens in a 'develop' branch, releases >> >>>> branches are branched off of that and merged into master and back into >> >>>> develop….etc >> >>>>> >> >>>>> Please read [1] it's a good read. >> >>>>> >> >>>>> And let's discuss, >> >>>>> >> >>>>> [1] http://nvie.com/posts/a-successful-git-branching-model/ >> >>>>> >> >>>>> -Sebastien >> >>>>> >> >>>>> On Jun 2, 2014, at 11:58 PM, Rajani Karuturi < >> rajani.karut...@citrix.com> >> >>>> wrote: >> >>>>> >> >>>>>> There is also the problem of cherry-picking. >> >>>>>> As a contributor, I always endup creating multiple patches for each >> >>>> branch as they don’t cleanly apply on the upward branches. which means >> >>>> distinct commits for each branch and I don’t easily know which all >> branches >> >>>> my commit exists unless I do grep. >> >>>>>> if we follow merging strategy properly, apart from the first merge >> of >> >>>> the branch, everything else on top of it should be a painless merge. >> >>>>>> >> >>>>>> >> >>>>>> >> >>>>>> ~Rajani >> >>>>>> >> >>>>>> >> >>>>>> >> >>>>>> On 02-Jun-2014, at 10:51 pm, Marcus <shadow...@gmail.com> wrote: >> >>>>>> >> >>>>>>> I think many of the bullet points are what we are currently doing >> >>>>>>> (guidelines for commit comments, feature branches need to stay in >> sync >> >>>> with >> >>>>>>> master, no back-merging). I also think that much of what we do now >> is >> >>>> done >> >>>>>>> the way it is simply because there *are* vast changes between >> versions. >> >>>>>>> Classes are getting shuffled around and changed all the time. If >> its >> >>>>>>> feasible to merge branch fixes to master, that's fine, but some >> quick >> >>>> tests >> >>>>>>> seem to indicate that this will be messy getting started. >> >>>>>>> >> >>>>>>> That leaves us with how we do releases. I'm fine with having single >> >>>>>>> branches for major releases(4.3) and tagging the commits where each >> >>>>>>> incremental release (4.3.x) is done. I'm trying to remember why we >> went >> >>>>>>> with the -forward, I'm sure it's in the mailing list somewhere, but >> >>>> one of >> >>>>>>> the nice things it provides is the ability for the release manager >> to >> >>>>>>> control what changes are made during code freeze while giving >> people a >> >>>>>>> place to stage fixes (though admittedly this is not always >> followed). >> >>>>>>> Without -forward, would the flow be for each dev to have their own >> >>>> repo and >> >>>>>>> issue pull requests for bugfixes? >> >>>>>>> >> >>>>>>> >> >>>>>>> On Mon, Jun 2, 2014 at 3:17 AM, Rajani Karuturi < >> >>>> rajani.karut...@citrix.com> >> >>>>>>> wrote: >> >>>>>>> >> >>>>>>>> Any other suggestions/objections/comments?? >> >>>>>>>> Can we discuss this in detail and agree to a process?? >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> ~Rajani >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> On 02-Jun-2014, at 9:32 am, Rajani Karuturi < >> >>>> rajani.karut...@citrix.com> >> >>>>>>>> wrote: >> >>>>>>>> >> >>>>>>>>> Yes as mike said, if its a one-off case we can do a empty >> >>>> merge(merge -s >> >>>>>>>> ours) for it and git will assume its merged but will not bring in >> any >> >>>>>>>> changes. >> >>>>>>>>> >> >>>>>>>>> If the branches diverged a lot, for example after a major >> rewrite, we >> >>>>>>>> could stop merging to that branch and above and make the fix >> manually. >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> ~Rajani >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> On 30-May-2014, at 11:26 pm, Mike Tutkowski < >> >>>>>>>> mike.tutkow...@solidfire.com> wrote: >> >>>>>>>>> >> >>>>>>>>>> Yep, that's what I was referring to in that a particular fix >> for an >> >>>> old >> >>>>>>>>>> release may not apply to newer versions. That does happen. >> >>>>>>>>>> >> >>>>>>>>>> We used to mark those as "don't need to merge to branch x" in >> SVN >> >>>> and >> >>>>>>>> then >> >>>>>>>>>> you handed it however made sense on the applicable branch(es). >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> On Fri, May 30, 2014 at 11:53 AM, Stephen Turner < >> >>>>>>>> stephen.tur...@citrix.com> >> >>>>>>>>>> wrote: >> >>>>>>>>>> >> >>>>>>>>>>> What happens if a fix isn't relevant for newer versions, or >> has to >> >>>> be >> >>>>>>>>>>> rewritten for newer versions because the code has changed? >> Don't >> >>>> the >> >>>>>>>>>>> branches diverge and you end up cherry-picking after that? >> >>>>>>>>>>> >> >>>>>>>>>>> -- >> >>>>>>>>>>> Stephen Turner >> >>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>>> -----Original Message----- >> >>>>>>>>>>> From: Mike Tutkowski [mailto:mike.tutkow...@solidfire.com] >> >>>>>>>>>>> Sent: 30 May 2014 18:48 >> >>>>>>>>>>> To: dev@cloudstack.apache.org >> >>>>>>>>>>> Subject: Re: [PROPOSAL] git workflow >> >>>>>>>>>>> >> >>>>>>>>>>> I think this flow is something we should seriously consider. >> >>>>>>>>>>> >> >>>>>>>>>>> I find cherry picking from branch to branch to be error prone >> in >> >>>> that >> >>>>>>>> it's >> >>>>>>>>>>> easy for someone to forget to cherry pick to all applicable >> >>>> branches >> >>>>>>>> and >> >>>>>>>>>>> you don't have any easy way to see the cherry picks are >> related. >> >>>>>>>>>>> >> >>>>>>>>>>> When I worked at HP, we had automated tools check to see if you >> >>>>>>>> checked a >> >>>>>>>>>>> fix into a prior release, but not later releases. In such a >> >>>> situation, >> >>>>>>>> you >> >>>>>>>>>>> either 1) forgot to perform the check-in or 2) the check-in >> was no >> >>>>>>>> longer >> >>>>>>>>>>> applicable in the later release(s), so you needed to mark it as >> >>>>>>>>>>> un-necessary (SVN supported this ability...not sure about Git). >> >>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>>> On Fri, May 30, 2014 at 10:49 AM, Rajani Karuturi < >> >>>>>>>>>>> rajani.karut...@citrix.com> wrote: >> >>>>>>>>>>> >> >>>>>>>>>>>> Hi all, >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> Our current git workflow is confusing with the *forward >> branches >> >>>> and >> >>>>>>>>>>>> cherry-picking. Its hard to track on what all releases the >> commit >> >>>> has >> >>>>>>>>>>>> gone into unless I do some git log greping. Also, as a >> >>>> contributor, I >> >>>>>>>>>>>> endup creating patches for each branch as it doesn’t cleanly >> >>>> apply on >> >>>>>>>>>>>> different branches. >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> I think we should have some guidelines. Here is what I >> propose. >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> 1. There should be branch for every major release(ex: 4.3.x, >> >>>> 4.4.x, >> >>>>>>>>>>>> 5.0.x,5.1.x) and the minor releases should be tagged >> accordingly >> >>>> on >> >>>>>>>>>>>> the respective branches. >> >>>>>>>>>>>> 2. The branch naming convention is to be followed. Many >> branches >> >>>>>>>>>>>> with 4.3, 4.3.0, 4.3.1 etc. is confusing >> >>>>>>>>>>>> 3. Cherry-picking should be avoided. In git, when we >> cherry-pick, >> >>>>>>>>>>>> we have two physically distinct commits for the same change or >> >>>> fix and >> >>>>>>>>>>>> is difficult to track unless you do cherry-pick -x >> >>>>>>>>>>>> 4. There should always be a continous flow from release >> branches >> >>>> to >> >>>>>>>>>>>> master. This doesn’t mean cherry-picking. They should be >> >>>> merged(either >> >>>>>>>>>>>> ff or no-ff) which retains the commit ids and easily trackable >> >>>> with >> >>>>>>>>>>>> git branch --contains >> >>>>>>>>>>>> * Every bug fix should always flow from minimal release >> uptill >> >>>>>>>>>>>> master. A bug isnt fixed until the fix reaches master. >> >>>>>>>>>>>> * For ex. A bug 4.2.1 should be committed to >> >>>>>>>>>>>> 4.2.x->4.3.x->4.4.x->master >> >>>>>>>>>>>> * If someone forgets to do the merge, the next time a new >> commit >> >>>>>>>>>>> is >> >>>>>>>>>>>> done this will also get merged. >> >>>>>>>>>>>> 5. There should always be a continuous flow from master to >> >>>> feature >> >>>>>>>>>>>> branches. Meaning all feature branch owners should proactively >> >>>> take >> >>>>>>>>>>>> any new commits from master by doing a merge from master >> >>>>>>>>>>>> 6. The commits from feature branch will make to master on >> code >> >>>>>>>>>>>> complete through a merge. >> >>>>>>>>>>>> 7. There should never be a merge from master to release >> branches >> >>>>>>>>>>>> 8. Every commit in LTS branch(targetted to any minor release) >> >>>>>>>>>>>> should have atleast bug id and correct author information >> >>>>>>>>>>>> * Cassandra's template: patch by <author>; reviewed by >> >>>>>>>> <committer> >> >>>>>>>>>>>> for CASSANDRA-<ticket> >> >>>>>>>>>>>> 9. Once the release branch is created(after code freeze), >> any bug >> >>>>>>>>>>>> in jira can be marked with fix version current release(4.4) >> only >> >>>> on >> >>>>>>>>>>>> RM's approval and only they can go to the release branch. >> This >> >>>> can be >> >>>>>>>>>>>> done through jira and with certain rules.(may be using jira >> vote?) >> >>>>>>>>>>>> this would save the cherry-picking time and another branch >> >>>>>>>> maintenance. >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> Please add your thoughts/suggestions/comments. >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> Ref: >> >>>>>>>>>>>> >> >>>> http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html >> >>>>>>>>>>>> https://www.youtube.com/watch?v=AJ-CpGsCpM0 >> >>>>>>>>>>>> >> >>>>>>>>>>>> ~Rajani >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>>> -- >> >>>>>>>>>>> *Mike Tutkowski* >> >>>>>>>>>>> *Senior CloudStack Developer, SolidFire Inc.* >> >>>>>>>>>>> e: mike.tutkow...@solidfire.com >> >>>>>>>>>>> o: 303.746.7302 >> >>>>>>>>>>> Advancing the way the world uses the cloud >> >>>>>>>>>>> <http://solidfire.com/solution/overview/?video=play>*™* >> >>>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> -- >> >>>>>>>>>> *Mike Tutkowski* >> >>>>>>>>>> *Senior CloudStack Developer, SolidFire Inc.* >> >>>>>>>>>> e: mike.tutkow...@solidfire.com >> >>>>>>>>>> o: 303.746.7302 >> >>>>>>>>>> Advancing the way the world uses the cloud >> >>>>>>>>>> <http://solidfire.com/solution/overview/?video=play>*™* >> >>>>>>>>> >> >>>>>>>> >> >>>>>>>> >> >>>>>> >> >>>>> >> >>>> >> >>>> >> >> >> > >> > >> > >> > -- >> > Daan >> >> > > > -- > *Mike Tutkowski* > *Senior CloudStack Developer, SolidFire Inc.* > e: mike.tutkow...@solidfire.com > o: 303.746.7302 > Advancing the way the world uses the cloud > <http://solidfire.com/solution/overview/?video=play>*™* -- Daan