Re: [DISCUSS][PROPOSAL] git workflow
Hey guys, I totally agree that going with a git workflow is the best way forward: * Having developers branch off of development onto a bugfix/feature branch to add or fix something in cloudstack, and controlling the merge back into development. * Using a release branch off of development in order to prepare a release candidate branch. Hotfix branches can be made off of a release branch to fix any final issues. * Standard gitflow would then have the release branch merge into master, which would contain only release-ready versions of the code. I've followed this project workflow for several projects, and it seems to work well. Once we get everyone accustomed to this, I think it will improve everyone's ability to follow along with what is happening in the project, and will help project coordinators keep control of the overall direction. Sam On Mon, Jul 28, 2014 at 11:03 AM, Rohit Yadav rohit.ya...@shapeblue.com wrote: Hi, It took me sometime to go through all the 58 emails on this thread. I suggest we need to adapt gitflow to our git workflow. I liked the summary Rajani suggested here: http://markmail.org/message/ 2642ilfajkpshnfn Let's continue the discussion in the new thread now: http://markmail.org/message/zf5yt47jqq3auswo Regards. Rajani Karuturi wrote: branches will be deleted after the release or hotfix if you use the git-flow commands. This would be the flow for a hotfix: 1. branch off from the release tag on master. in this case it would be release/4.4.0 2. commit the fixes in hotfix/4.4.1 3. do the release 4. merge to develop 5. merge to master and update tags 6. delete hotfix branch But, I agree that there can be a problem when we wish to do 4.4.2 if we delete the hotfix branch may be we should use git-flow support instead of hotfix which doesn’t delete the branch http://stackoverflow.com/a/16866118/201514 ~Rajani On 25-Jul-2014, at 12:31 pm, Daan Hooglanddaan.hoogl...@gmail.com wrote: Rightful question Erik, Rajani mentioned that release branches will be deleted. This will only happen once the release is no longer supported. Any hotfix branch will still have to merged on that (and master possibly) until we stop supporting that branch. On the other hand you can branch from any commit. btw 4.4.1 is a bad example of you as we will still maintain that without gitflow. But it is valid for for instance 4.5.2 or 5.0.1. On Fri, Jul 25, 2014 at 8:04 AM, Erik Weberterbol...@gmail.com wrote: This is out of my git league, but how do you handle minor versions that way? Assuming 4.8.0 is the latest stable release and HEAD on master. Then you want to release 4.4.1. First of all can you develop bugfixes for 4.4 along the way, when both develop and master HEAD might be hugely different? Second, can you commit behind HEAD? You don't want the 4.4.1 release instead of 4.8.0 to be HEAD Someone might have good solutions to this, but if not I would propose to keep the release branches for future bugfixes. Erik 25. juli 2014 06:02 skrev Rajani Karuturirajani.karut...@citrix.com følgende: On 24-Jul-2014, at 10:25 pm, Mike Tutkowskimike.tutkowski@ solidfire.com wrote: I believe I agree with these steps. A couple questions: Is 'master' simply always going to be equal to what's the most recent version of the code that's in production? I think so. master will always be at the latest release and all the previous releases properly tagged. The release branches would be deleted once release is done. Also, would 'develop' be for 4.6 code then and 4.5 code would go directly into RELEASE-4.5? Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes should be done on the 4.5 branch. ~Rajani On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: Hi Daan, here is what i propose: 1. rename 'master' to 'develop’ 2. branch a new 'master' from '4.4’ 3. branch 'RELEASE-4.5' from the develop 4. merge 'RELEASE-4.5' to master once the release voting is done. RELEASE-4.6 branch should be off develop as all the feature branches would be merged there before freeze for 4.6 and would be merged to master when the release is voted. The other question I have is in the step:4. how are we going to manage fixes to 4.5 post branch cut? ( assuming no features as the freeze is done) ~Rajani On 24-Jul-2014, at 11:52 am, Daan Hooglanddaan.hoogl...@gmail.com wrote: Mike, Rajani, Sebastien's point was that the current 4.4 is the closest we have to a releasable branch. I don't mind enting on master but it will require more fixing. In general all of this will require some RM work of all committers. Please ammend my little proposal if you will. On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: I agree with mike. I think we should start 4.5 from where master is now Also create a develop branch from master and
Re: [DISCUSS][PROPOSAL] git workflow
I just got caught up on this. My apologies for the delay. I think that we are very much on the right track and that we are right to deviate from the normal gitflow concept around the maintenance versions. Since we will in theory have a 4.5.1 after 4.6.0 is released, there will be some level of concurrent release management occurring. I also agree that 4.4.x is probably an overly difficult area to start this new process. The git foo that Leo pulled out is impressive and certainly shows the sheer pain that would be incurred by taking that path. I'm sure the transition won't be trivial, but we don't need to make it any harder than we have to. Thanks -Nate On Tue, Jul 29, 2014 at 10:00 AM, Sam Schmit sam.sch...@appcore.com wrote: Hey guys, I totally agree that going with a git workflow is the best way forward: * Having developers branch off of development onto a bugfix/feature branch to add or fix something in cloudstack, and controlling the merge back into development. * Using a release branch off of development in order to prepare a release candidate branch. Hotfix branches can be made off of a release branch to fix any final issues. * Standard gitflow would then have the release branch merge into master, which would contain only release-ready versions of the code. I've followed this project workflow for several projects, and it seems to work well. Once we get everyone accustomed to this, I think it will improve everyone's ability to follow along with what is happening in the project, and will help project coordinators keep control of the overall direction. Sam On Mon, Jul 28, 2014 at 11:03 AM, Rohit Yadav rohit.ya...@shapeblue.com wrote: Hi, It took me sometime to go through all the 58 emails on this thread. I suggest we need to adapt gitflow to our git workflow. I liked the summary Rajani suggested here: http://markmail.org/message/ 2642ilfajkpshnfn Let's continue the discussion in the new thread now: http://markmail.org/message/zf5yt47jqq3auswo Regards. Rajani Karuturi wrote: branches will be deleted after the release or hotfix if you use the git-flow commands. This would be the flow for a hotfix: 1. branch off from the release tag on master. in this case it would be release/4.4.0 2. commit the fixes in hotfix/4.4.1 3. do the release 4. merge to develop 5. merge to master and update tags 6. delete hotfix branch But, I agree that there can be a problem when we wish to do 4.4.2 if we delete the hotfix branch may be we should use git-flow support instead of hotfix which doesn’t delete the branch http://stackoverflow.com/a/16866118/201514 ~Rajani On 25-Jul-2014, at 12:31 pm, Daan Hooglanddaan.hoogl...@gmail.com wrote: Rightful question Erik, Rajani mentioned that release branches will be deleted. This will only happen once the release is no longer supported. Any hotfix branch will still have to merged on that (and master possibly) until we stop supporting that branch. On the other hand you can branch from any commit. btw 4.4.1 is a bad example of you as we will still maintain that without gitflow. But it is valid for for instance 4.5.2 or 5.0.1. On Fri, Jul 25, 2014 at 8:04 AM, Erik Weberterbol...@gmail.com wrote: This is out of my git league, but how do you handle minor versions that way? Assuming 4.8.0 is the latest stable release and HEAD on master. Then you want to release 4.4.1. First of all can you develop bugfixes for 4.4 along the way, when both develop and master HEAD might be hugely different? Second, can you commit behind HEAD? You don't want the 4.4.1 release instead of 4.8.0 to be HEAD Someone might have good solutions to this, but if not I would propose to keep the release branches for future bugfixes. Erik 25. juli 2014 06:02 skrev Rajani Karuturi rajani.karut...@citrix.com følgende: On 24-Jul-2014, at 10:25 pm, Mike Tutkowskimike.tutkowski@ solidfire.com wrote: I believe I agree with these steps. A couple questions: Is 'master' simply always going to be equal to what's the most recent version of the code that's in production? I think so. master will always be at the latest release and all the previous releases properly tagged. The release branches would be deleted once release is done. Also, would 'develop' be for 4.6 code then and 4.5 code would go directly into RELEASE-4.5? Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes should be done on the 4.5 branch. ~Rajani On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: Hi Daan, here is what i propose: 1. rename 'master' to 'develop’ 2. branch a new 'master' from '4.4’ 3. branch 'RELEASE-4.5' from the develop 4. merge 'RELEASE-4.5' to master once the release voting is done. RELEASE-4.6 branch should be off develop
Re: [DISCUSS][PROPOSAL] git workflow
Hi, It took me sometime to go through all the 58 emails on this thread. I suggest we need to adapt gitflow to our git workflow. I liked the summary Rajani suggested here: http://markmail.org/message/2642ilfajkpshnfn Let's continue the discussion in the new thread now: http://markmail.org/message/zf5yt47jqq3auswo Regards. Rajani Karuturi wrote: branches will be deleted after the release or hotfix if you use the git-flow commands. This would be the flow for a hotfix: 1. branch off from the release tag on master. in this case it would be release/4.4.0 2. commit the fixes in hotfix/4.4.1 3. do the release 4. merge to develop 5. merge to master and update tags 6. delete hotfix branch But, I agree that there can be a problem when we wish to do 4.4.2 if we delete the hotfix branch may be we should use git-flow support instead of hotfix which doesn’t delete the branch http://stackoverflow.com/a/16866118/201514 ~Rajani On 25-Jul-2014, at 12:31 pm, Daan Hooglanddaan.hoogl...@gmail.com wrote: Rightful question Erik, Rajani mentioned that release branches will be deleted. This will only happen once the release is no longer supported. Any hotfix branch will still have to merged on that (and master possibly) until we stop supporting that branch. On the other hand you can branch from any commit. btw 4.4.1 is a bad example of you as we will still maintain that without gitflow. But it is valid for for instance 4.5.2 or 5.0.1. On Fri, Jul 25, 2014 at 8:04 AM, Erik Weberterbol...@gmail.com wrote: This is out of my git league, but how do you handle minor versions that way? Assuming 4.8.0 is the latest stable release and HEAD on master. Then you want to release 4.4.1. First of all can you develop bugfixes for 4.4 along the way, when both develop and master HEAD might be hugely different? Second, can you commit behind HEAD? You don't want the 4.4.1 release instead of 4.8.0 to be HEAD Someone might have good solutions to this, but if not I would propose to keep the release branches for future bugfixes. Erik 25. juli 2014 06:02 skrev Rajani Karuturirajani.karut...@citrix.com følgende: On 24-Jul-2014, at 10:25 pm, Mike Tutkowskimike.tutkow...@solidfire.com wrote: I believe I agree with these steps. A couple questions: Is 'master' simply always going to be equal to what's the most recent version of the code that's in production? I think so. master will always be at the latest release and all the previous releases properly tagged. The release branches would be deleted once release is done. Also, would 'develop' be for 4.6 code then and 4.5 code would go directly into RELEASE-4.5? Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes should be done on the 4.5 branch. ~Rajani On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: Hi Daan, here is what i propose: 1. rename 'master' to 'develop’ 2. branch a new 'master' from '4.4’ 3. branch 'RELEASE-4.5' from the develop 4. merge 'RELEASE-4.5' to master once the release voting is done. RELEASE-4.6 branch should be off develop as all the feature branches would be merged there before freeze for 4.6 and would be merged to master when the release is voted. The other question I have is in the step:4. how are we going to manage fixes to 4.5 post branch cut? ( assuming no features as the freeze is done) ~Rajani On 24-Jul-2014, at 11:52 am, Daan Hooglanddaan.hoogl...@gmail.com wrote: Mike, Rajani, Sebastien's point was that the current 4.4 is the closest we have to a releasable branch. I don't mind enting on master but it will require more fixing. In general all of this will require some RM work of all committers. Please ammend my little proposal if you will. On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: I agree with mike. I think we should start 4.5 from where master is now Also create a develop branch from master and continue future work for 4.6 there. I am not clear on how the release branches are going to be maintained. Are we saying we would create 4.5-RELEASE branch which is essentially same as our current -FORWARD branch and continue cherry-picking? I would prefer merges to cherry-picks. Also, I think we should allow committers to commit to the RELEASE branch after discussing about it on dev@ and have RM closely monitor them. Any commit intended for 4.5 RELEASE should be checked in after discussion in the 4.5 Release branch and then merged to develop branch. ~Rajani On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off and then merge features from develop into 4.5. Why don't we instead start 4.5 where master is now with the assumption that since we are past Feature Freeze for 4.5 that master is stable enough? On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: so to start formulate
Re: [DISCUSS][PROPOSAL] git workflow
This is out of my git league, but how do you handle minor versions that way? Assuming 4.8.0 is the latest stable release and HEAD on master. Then you want to release 4.4.1. First of all can you develop bugfixes for 4.4 along the way, when both develop and master HEAD might be hugely different? Second, can you commit behind HEAD? You don't want the 4.4.1 release instead of 4.8.0 to be HEAD Someone might have good solutions to this, but if not I would propose to keep the release branches for future bugfixes. Erik 25. juli 2014 06:02 skrev Rajani Karuturi rajani.karut...@citrix.com følgende: On 24-Jul-2014, at 10:25 pm, Mike Tutkowski mike.tutkow...@solidfire.com wrote: I believe I agree with these steps. A couple questions: Is 'master' simply always going to be equal to what's the most recent version of the code that's in production? I think so. master will always be at the latest release and all the previous releases properly tagged. The release branches would be deleted once release is done. Also, would 'develop' be for 4.6 code then and 4.5 code would go directly into RELEASE-4.5? Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes should be done on the 4.5 branch. ~Rajani On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: Hi Daan, here is what i propose: 1. rename 'master' to 'develop’ 2. branch a new 'master' from '4.4’ 3. branch 'RELEASE-4.5' from the develop 4. merge 'RELEASE-4.5' to master once the release voting is done. RELEASE-4.6 branch should be off develop as all the feature branches would be merged there before freeze for 4.6 and would be merged to master when the release is voted. The other question I have is in the step:4. how are we going to manage fixes to 4.5 post branch cut? ( assuming no features as the freeze is done) ~Rajani On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com wrote: Mike, Rajani, Sebastien's point was that the current 4.4 is the closest we have to a releasable branch. I don't mind enting on master but it will require more fixing. In general all of this will require some RM work of all committers. Please ammend my little proposal if you will. On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: I agree with mike. I think we should start 4.5 from where master is now Also create a develop branch from master and continue future work for 4.6 there. I am not clear on how the release branches are going to be maintained. Are we saying we would create 4.5-RELEASE branch which is essentially same as our current -FORWARD branch and continue cherry-picking? I would prefer merges to cherry-picks. Also, I think we should allow committers to commit to the RELEASE branch after discussing about it on dev@ and have RM closely monitor them. Any commit intended for 4.5 RELEASE should be checked in after discussion in the 4.5 Release branch and then merged to develop branch. ~Rajani On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off and then merge features from develop into 4.5. Why don't we instead start 4.5 where master is now with the assumption that since we are past Feature Freeze for 4.5 that master is stable enough? On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: so to start formulate a proposal: all work shall be done in a new branch (it is advisable to prefix your branches with your id) when working, features will be cherry-picked/merged into the release branch they are for and next into master. hotfixes will be done in branchname-hotfixes as transition we will rename 'master' to 'develop' branch a new 'master' from '4.4' branch '4.5' from the new 'master' merge any features from the new 'develop' to '4.5' and 'master' On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote: Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with the norm? If master is the development branch, it might not be stable. I think the goal here is that we have an obvious stable branch. Anyone could come check out master and have the latest useable. I am in favor of following the norm, so ideally master should be our stable branch (agreed). The issue is with the transition. Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we could start a stable branch of this tag and build up bug fix releases all the way
Re: [DISCUSS][PROPOSAL] git workflow
Rightful question Erik, Rajani mentioned that release branches will be deleted. This will only happen once the release is no longer supported. Any hotfix branch will still have to merged on that (and master possibly) until we stop supporting that branch. On the other hand you can branch from any commit. btw 4.4.1 is a bad example of you as we will still maintain that without gitflow. But it is valid for for instance 4.5.2 or 5.0.1. On Fri, Jul 25, 2014 at 8:04 AM, Erik Weber terbol...@gmail.com wrote: This is out of my git league, but how do you handle minor versions that way? Assuming 4.8.0 is the latest stable release and HEAD on master. Then you want to release 4.4.1. First of all can you develop bugfixes for 4.4 along the way, when both develop and master HEAD might be hugely different? Second, can you commit behind HEAD? You don't want the 4.4.1 release instead of 4.8.0 to be HEAD Someone might have good solutions to this, but if not I would propose to keep the release branches for future bugfixes. Erik 25. juli 2014 06:02 skrev Rajani Karuturi rajani.karut...@citrix.com følgende: On 24-Jul-2014, at 10:25 pm, Mike Tutkowski mike.tutkow...@solidfire.com wrote: I believe I agree with these steps. A couple questions: Is 'master' simply always going to be equal to what's the most recent version of the code that's in production? I think so. master will always be at the latest release and all the previous releases properly tagged. The release branches would be deleted once release is done. Also, would 'develop' be for 4.6 code then and 4.5 code would go directly into RELEASE-4.5? Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes should be done on the 4.5 branch. ~Rajani On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: Hi Daan, here is what i propose: 1. rename 'master' to 'develop’ 2. branch a new 'master' from '4.4’ 3. branch 'RELEASE-4.5' from the develop 4. merge 'RELEASE-4.5' to master once the release voting is done. RELEASE-4.6 branch should be off develop as all the feature branches would be merged there before freeze for 4.6 and would be merged to master when the release is voted. The other question I have is in the step:4. how are we going to manage fixes to 4.5 post branch cut? ( assuming no features as the freeze is done) ~Rajani On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com wrote: Mike, Rajani, Sebastien's point was that the current 4.4 is the closest we have to a releasable branch. I don't mind enting on master but it will require more fixing. In general all of this will require some RM work of all committers. Please ammend my little proposal if you will. On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: I agree with mike. I think we should start 4.5 from where master is now Also create a develop branch from master and continue future work for 4.6 there. I am not clear on how the release branches are going to be maintained. Are we saying we would create 4.5-RELEASE branch which is essentially same as our current -FORWARD branch and continue cherry-picking? I would prefer merges to cherry-picks. Also, I think we should allow committers to commit to the RELEASE branch after discussing about it on dev@ and have RM closely monitor them. Any commit intended for 4.5 RELEASE should be checked in after discussion in the 4.5 Release branch and then merged to develop branch. ~Rajani On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off and then merge features from develop into 4.5. Why don't we instead start 4.5 where master is now with the assumption that since we are past Feature Freeze for 4.5 that master is stable enough? On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: so to start formulate a proposal: all work shall be done in a new branch (it is advisable to prefix your branches with your id) when working, features will be cherry-picked/merged into the release branch they are for and next into master. hotfixes will be done in branchname-hotfixes as transition we will rename 'master' to 'develop' branch a new 'master' from '4.4' branch '4.5' from the new 'master' merge any features from the new 'develop' to '4.5' and 'master' On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote: Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with
Re: [DISCUSS][PROPOSAL] git workflow
I went on and read the comments in http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html It contains a big warning on using gitflow that has been between my lines in this thread all along. Git flow is not going to solve our problem. It is a discipline that is captured in it that will save us. Please everybody educate yourselves on the subject. If we are going to get along as a community we need to get this right. We'll be able to support old releases and make new ones just like we dream. gitflow wont give us that by itself. Daan (sounding desperate and impatient but being eager) On Fri, Jul 25, 2014 at 9:01 AM, Daan Hoogland daan.hoogl...@gmail.com wrote: Rightful question Erik, Rajani mentioned that release branches will be deleted. This will only happen once the release is no longer supported. Any hotfix branch will still have to merged on that (and master possibly) until we stop supporting that branch. On the other hand you can branch from any commit. btw 4.4.1 is a bad example of you as we will still maintain that without gitflow. But it is valid for for instance 4.5.2 or 5.0.1. On Fri, Jul 25, 2014 at 8:04 AM, Erik Weber terbol...@gmail.com wrote: This is out of my git league, but how do you handle minor versions that way? Assuming 4.8.0 is the latest stable release and HEAD on master. Then you want to release 4.4.1. First of all can you develop bugfixes for 4.4 along the way, when both develop and master HEAD might be hugely different? Second, can you commit behind HEAD? You don't want the 4.4.1 release instead of 4.8.0 to be HEAD Someone might have good solutions to this, but if not I would propose to keep the release branches for future bugfixes. Erik 25. juli 2014 06:02 skrev Rajani Karuturi rajani.karut...@citrix.com følgende: On 24-Jul-2014, at 10:25 pm, Mike Tutkowski mike.tutkow...@solidfire.com wrote: I believe I agree with these steps. A couple questions: Is 'master' simply always going to be equal to what's the most recent version of the code that's in production? I think so. master will always be at the latest release and all the previous releases properly tagged. The release branches would be deleted once release is done. Also, would 'develop' be for 4.6 code then and 4.5 code would go directly into RELEASE-4.5? Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes should be done on the 4.5 branch. ~Rajani On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: Hi Daan, here is what i propose: 1. rename 'master' to 'develop’ 2. branch a new 'master' from '4.4’ 3. branch 'RELEASE-4.5' from the develop 4. merge 'RELEASE-4.5' to master once the release voting is done. RELEASE-4.6 branch should be off develop as all the feature branches would be merged there before freeze for 4.6 and would be merged to master when the release is voted. The other question I have is in the step:4. how are we going to manage fixes to 4.5 post branch cut? ( assuming no features as the freeze is done) ~Rajani On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com wrote: Mike, Rajani, Sebastien's point was that the current 4.4 is the closest we have to a releasable branch. I don't mind enting on master but it will require more fixing. In general all of this will require some RM work of all committers. Please ammend my little proposal if you will. On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: I agree with mike. I think we should start 4.5 from where master is now Also create a develop branch from master and continue future work for 4.6 there. I am not clear on how the release branches are going to be maintained. Are we saying we would create 4.5-RELEASE branch which is essentially same as our current -FORWARD branch and continue cherry-picking? I would prefer merges to cherry-picks. Also, I think we should allow committers to commit to the RELEASE branch after discussing about it on dev@ and have RM closely monitor them. Any commit intended for 4.5 RELEASE should be checked in after discussion in the 4.5 Release branch and then merged to develop branch. ~Rajani On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off and then merge features from develop into 4.5. Why don't we instead start 4.5 where master is now with the assumption that since we are past Feature Freeze for 4.5 that master is stable enough? On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: so to start formulate a proposal: all work shall be done in a new branch (it is advisable to prefix your branches with your id) when working, features will be cherry-picked/merged into the release
Re: [DISCUSS][PROPOSAL] git workflow
branches will be deleted after the release or hotfix if you use the git-flow commands. This would be the flow for a hotfix: 1. branch off from the release tag on master. in this case it would be release/4.4.0 2. commit the fixes in hotfix/4.4.1 3. do the release 4. merge to develop 5. merge to master and update tags 6. delete hotfix branch But, I agree that there can be a problem when we wish to do 4.4.2 if we delete the hotfix branch may be we should use git-flow support instead of hotfix which doesn’t delete the branch http://stackoverflow.com/a/16866118/201514 ~Rajani On 25-Jul-2014, at 12:31 pm, Daan Hoogland daan.hoogl...@gmail.com wrote: Rightful question Erik, Rajani mentioned that release branches will be deleted. This will only happen once the release is no longer supported. Any hotfix branch will still have to merged on that (and master possibly) until we stop supporting that branch. On the other hand you can branch from any commit. btw 4.4.1 is a bad example of you as we will still maintain that without gitflow. But it is valid for for instance 4.5.2 or 5.0.1. On Fri, Jul 25, 2014 at 8:04 AM, Erik Weber terbol...@gmail.com wrote: This is out of my git league, but how do you handle minor versions that way? Assuming 4.8.0 is the latest stable release and HEAD on master. Then you want to release 4.4.1. First of all can you develop bugfixes for 4.4 along the way, when both develop and master HEAD might be hugely different? Second, can you commit behind HEAD? You don't want the 4.4.1 release instead of 4.8.0 to be HEAD Someone might have good solutions to this, but if not I would propose to keep the release branches for future bugfixes. Erik 25. juli 2014 06:02 skrev Rajani Karuturi rajani.karut...@citrix.com følgende: On 24-Jul-2014, at 10:25 pm, Mike Tutkowski mike.tutkow...@solidfire.com wrote: I believe I agree with these steps. A couple questions: Is 'master' simply always going to be equal to what's the most recent version of the code that's in production? I think so. master will always be at the latest release and all the previous releases properly tagged. The release branches would be deleted once release is done. Also, would 'develop' be for 4.6 code then and 4.5 code would go directly into RELEASE-4.5? Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes should be done on the 4.5 branch. ~Rajani On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: Hi Daan, here is what i propose: 1. rename 'master' to 'develop’ 2. branch a new 'master' from '4.4’ 3. branch 'RELEASE-4.5' from the develop 4. merge 'RELEASE-4.5' to master once the release voting is done. RELEASE-4.6 branch should be off develop as all the feature branches would be merged there before freeze for 4.6 and would be merged to master when the release is voted. The other question I have is in the step:4. how are we going to manage fixes to 4.5 post branch cut? ( assuming no features as the freeze is done) ~Rajani On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com wrote: Mike, Rajani, Sebastien's point was that the current 4.4 is the closest we have to a releasable branch. I don't mind enting on master but it will require more fixing. In general all of this will require some RM work of all committers. Please ammend my little proposal if you will. On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: I agree with mike. I think we should start 4.5 from where master is now Also create a develop branch from master and continue future work for 4.6 there. I am not clear on how the release branches are going to be maintained. Are we saying we would create 4.5-RELEASE branch which is essentially same as our current -FORWARD branch and continue cherry-picking? I would prefer merges to cherry-picks. Also, I think we should allow committers to commit to the RELEASE branch after discussing about it on dev@ and have RM closely monitor them. Any commit intended for 4.5 RELEASE should be checked in after discussion in the 4.5 Release branch and then merged to develop branch. ~Rajani On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off and then merge features from develop into 4.5. Why don't we instead start 4.5 where master is now with the assumption that since we are past Feature Freeze for 4.5 that master is stable enough? On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: so to start formulate a proposal: all work shall be done in a new branch (it is advisable to prefix your branches with your id) when working, features will be cherry-picked/merged into the release branch they are for and next into master. hotfixes will
Re: [DISCUSS][PROPOSAL] git workflow
On Fri, Jul 25, 2014 at 1:16 PM, Rajani Karuturi rajani.karut...@citrix.com wrote: may be we should use git-flow support instead of hotfix which doesn’t delete the branch Good call Rajani -- Daan
Re: [DISCUSS][PROPOSAL] git workflow
That seems to handle my concern :-) Erik 25. juli 2014 13:16 skrev Rajani Karuturi rajani.karut...@citrix.com følgende: branches will be deleted after the release or hotfix if you use the git-flow commands. This would be the flow for a hotfix: 1. branch off from the release tag on master. in this case it would be release/4.4.0 2. commit the fixes in hotfix/4.4.1 3. do the release 4. merge to develop 5. merge to master and update tags 6. delete hotfix branch But, I agree that there can be a problem when we wish to do 4.4.2 if we delete the hotfix branch may be we should use git-flow support instead of hotfix which doesn’t delete the branch http://stackoverflow.com/a/16866118/201514 ~Rajani On 25-Jul-2014, at 12:31 pm, Daan Hoogland daan.hoogl...@gmail.com wrote: Rightful question Erik, Rajani mentioned that release branches will be deleted. This will only happen once the release is no longer supported. Any hotfix branch will still have to merged on that (and master possibly) until we stop supporting that branch. On the other hand you can branch from any commit. btw 4.4.1 is a bad example of you as we will still maintain that without gitflow. But it is valid for for instance 4.5.2 or 5.0.1. On Fri, Jul 25, 2014 at 8:04 AM, Erik Weber terbol...@gmail.com wrote: This is out of my git league, but how do you handle minor versions that way? Assuming 4.8.0 is the latest stable release and HEAD on master. Then you want to release 4.4.1. First of all can you develop bugfixes for 4.4 along the way, when both develop and master HEAD might be hugely different? Second, can you commit behind HEAD? You don't want the 4.4.1 release instead of 4.8.0 to be HEAD Someone might have good solutions to this, but if not I would propose to keep the release branches for future bugfixes. Erik 25. juli 2014 06:02 skrev Rajani Karuturi rajani.karut...@citrix.com følgende: On 24-Jul-2014, at 10:25 pm, Mike Tutkowski mike.tutkow...@solidfire.com wrote: I believe I agree with these steps. A couple questions: Is 'master' simply always going to be equal to what's the most recent version of the code that's in production? I think so. master will always be at the latest release and all the previous releases properly tagged. The release branches would be deleted once release is done. Also, would 'develop' be for 4.6 code then and 4.5 code would go directly into RELEASE-4.5? Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes should be done on the 4.5 branch. ~Rajani On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: Hi Daan, here is what i propose: 1. rename 'master' to 'develop’ 2. branch a new 'master' from '4.4’ 3. branch 'RELEASE-4.5' from the develop 4. merge 'RELEASE-4.5' to master once the release voting is done. RELEASE-4.6 branch should be off develop as all the feature branches would be merged there before freeze for 4.6 and would be merged to master when the release is voted. The other question I have is in the step:4. how are we going to manage fixes to 4.5 post branch cut? ( assuming no features as the freeze is done) ~Rajani On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com wrote: Mike, Rajani, Sebastien's point was that the current 4.4 is the closest we have to a releasable branch. I don't mind enting on master but it will require more fixing. In general all of this will require some RM work of all committers. Please ammend my little proposal if you will. On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: I agree with mike. I think we should start 4.5 from where master is now Also create a develop branch from master and continue future work for 4.6 there. I am not clear on how the release branches are going to be maintained. Are we saying we would create 4.5-RELEASE branch which is essentially same as our current -FORWARD branch and continue cherry-picking? I would prefer merges to cherry-picks. Also, I think we should allow committers to commit to the RELEASE branch after discussing about it on dev@ and have RM closely monitor them. Any commit intended for 4.5 RELEASE should be checked in after discussion in the 4.5 Release branch and then merged to develop branch. ~Rajani On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off and then merge features from develop into 4.5. Why don't we instead start 4.5 where master is now with the assumption that since we are past Feature Freeze for 4.5 that master is stable enough? On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: so to start formulate
Re: [DISCUSS][PROPOSAL] git workflow
Mike, Rajani, Sebastien's point was that the current 4.4 is the closest we have to a releasable branch. I don't mind enting on master but it will require more fixing. In general all of this will require some RM work of all committers. Please ammend my little proposal if you will. On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: I agree with mike. I think we should start 4.5 from where master is now Also create a develop branch from master and continue future work for 4.6 there. I am not clear on how the release branches are going to be maintained. Are we saying we would create 4.5-RELEASE branch which is essentially same as our current -FORWARD branch and continue cherry-picking? I would prefer merges to cherry-picks. Also, I think we should allow committers to commit to the RELEASE branch after discussing about it on dev@ and have RM closely monitor them. Any commit intended for 4.5 RELEASE should be checked in after discussion in the 4.5 Release branch and then merged to develop branch. ~Rajani On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off and then merge features from develop into 4.5. Why don't we instead start 4.5 where master is now with the assumption that since we are past Feature Freeze for 4.5 that master is stable enough? On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: so to start formulate a proposal: all work shall be done in a new branch (it is advisable to prefix your branches with your id) when working, features will be cherry-picked/merged into the release branch they are for and next into master. hotfixes will be done in branchname-hotfixes as transition we will rename 'master' to 'develop' branch a new 'master' from '4.4' branch '4.5' from the new 'master' merge any features from the new 'develop' to '4.5' and 'master' On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote: Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with the norm? If master is the development branch, it might not be stable. I think the goal here is that we have an obvious stable branch. Anyone could come check out master and have the latest useable. I am in favor of following the norm, so ideally master should be our stable branch (agreed). The issue is with the transition. Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we could start a stable branch of this tag and build up bug fix releases all the way to 4.5 from there. But all features for 4.5 are already in master. So if we create a 'develop' branch of master and stabilize 'master' then develop is now started from a stable tag (4.4.0). *not* started from a stable tag, and merges will be tricky, no ? So what's the best way to flip ? There is most likely some git magic that can we do. The new git workflow and the transition process need to be part of a proposal that we get consensus on. getting there :) -seb Also, I'm struggling to understand the benefit of cherry-pick. If you completely squash history, you lose a tremendous amount of context, which I use extensively to figure out why a bug is the way it is. Only knowing that the branch was merged at a given point in time doesn't give any context. Seeing the individual commit history of the branch helps to preserve the rationale for why the code was written the way it was. In theory if every change starts out as a branch (feature, hotfix, release), then why not just merge the branch once it is in a good and acceptable state? I also agree with Mike that this will have to be a transition over time. It will take some time to clean up master to the point where it can be considered a solid stable branch. Possibly as part of the 4.5 release. On Wed, Jul 23, 2014 at 10: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
Re: [DISCUSS][PROPOSAL] git workflow
24. juli 2014 06:28 skrev Rajani Karuturi rajani.karut...@citrix.com følgende: I agree with mike. I think we should start 4.5 from where master is now Also create a develop branch from master and continue future work for 4.6 there. I am not clear on how the release branches are going to be maintained. Are we saying we would create 4.5-RELEASE branch which is essentially same as our current -FORWARD branch and continue cherry-picking? After feature freeze or whenever it's decided to finish a release you create a branch called release-version, e.g. release-4.6. From then on 'develop' focus is on 4.7 or whatever the next version is called. Whenever something gets merged to release-4.6 it should also get merged to develop. I would prefer merges to cherry-picks. A lot of the point in this workflow is visibility / traceability, so merging should really be the way we work Also, I think we should allow committers to commit to the RELEASE branch after discussing about it on dev@ and have RM closely monitor them. If code is merged instead of cherry-picked it is easier to see / trace what has happened , and potentially revert. It is important though that RM's job isn't made much more difficult to manage . Erik Any commit intended for 4.5 RELEASE should be checked in after discussion in the 4.5 Release branch and then merged to develop branch. ~Rajani On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off and then merge features from develop into 4.5. Why don't we instead start 4.5 where master is now with the assumption that since we are past Feature Freeze for 4.5 that master is stable enough? On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: so to start formulate a proposal: all work shall be done in a new branch (it is advisable to prefix your branches with your id) when working, features will be cherry-picked/merged into the release branch they are for and next into master. hotfixes will be done in branchname-hotfixes as transition we will rename 'master' to 'develop' branch a new 'master' from '4.4' branch '4.5' from the new 'master' merge any features from the new 'develop' to '4.5' and 'master' On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote: Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with the norm? If master is the development branch, it might not be stable. I think the goal here is that we have an obvious stable branch. Anyone could come check out master and have the latest useable. I am in favor of following the norm, so ideally master should be our stable branch (agreed). The issue is with the transition. Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we could start a stable branch of this tag and build up bug fix releases all the way to 4.5 from there. But all features for 4.5 are already in master. So if we create a 'develop' branch of master and stabilize 'master' then develop is now started from a stable tag (4.4.0). *not* started from a stable tag, and merges will be tricky, no ? So what's the best way to flip ? There is most likely some git magic that can we do. The new git workflow and the transition process need to be part of a proposal that we get consensus on. getting there :) -seb Also, I'm struggling to understand the benefit of cherry-pick. If you completely squash history, you lose a tremendous amount of context, which I use extensively to figure out why a bug is the way it is. Only knowing that the branch was merged at a given point in time doesn't give any context. Seeing the individual commit history of the branch helps to preserve the rationale for why the code was written the way it was. In theory if every change starts out as a branch (feature, hotfix, release), then why not just merge the branch once it is in a good and acceptable state? I also agree with Mike that this will have to be a transition over time. It will take some time to clean up master to the point where it can be considered a solid stable branch. Possibly as part of the 4.5 release. On Wed, Jul 23, 2014 at 10: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
Re: [DISCUSS][PROPOSAL] git workflow
Hi Daan, here is what i propose: 1. rename 'master' to 'develop’ 2. branch a new 'master' from '4.4’ 3. branch 'RELEASE-4.5' from the develop 4. merge 'RELEASE-4.5' to master once the release voting is done. RELEASE-4.6 branch should be off develop as all the feature branches would be merged there before freeze for 4.6 and would be merged to master when the release is voted. The other question I have is in the step:4. how are we going to manage fixes to 4.5 post branch cut? ( assuming no features as the freeze is done) ~Rajani On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com wrote: Mike, Rajani, Sebastien's point was that the current 4.4 is the closest we have to a releasable branch. I don't mind enting on master but it will require more fixing. In general all of this will require some RM work of all committers. Please ammend my little proposal if you will. On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: I agree with mike. I think we should start 4.5 from where master is now Also create a develop branch from master and continue future work for 4.6 there. I am not clear on how the release branches are going to be maintained. Are we saying we would create 4.5-RELEASE branch which is essentially same as our current -FORWARD branch and continue cherry-picking? I would prefer merges to cherry-picks. Also, I think we should allow committers to commit to the RELEASE branch after discussing about it on dev@ and have RM closely monitor them. Any commit intended for 4.5 RELEASE should be checked in after discussion in the 4.5 Release branch and then merged to develop branch. ~Rajani On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off and then merge features from develop into 4.5. Why don't we instead start 4.5 where master is now with the assumption that since we are past Feature Freeze for 4.5 that master is stable enough? On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: so to start formulate a proposal: all work shall be done in a new branch (it is advisable to prefix your branches with your id) when working, features will be cherry-picked/merged into the release branch they are for and next into master. hotfixes will be done in branchname-hotfixes as transition we will rename 'master' to 'develop' branch a new 'master' from '4.4' branch '4.5' from the new 'master' merge any features from the new 'develop' to '4.5' and 'master' On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote: Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with the norm? If master is the development branch, it might not be stable. I think the goal here is that we have an obvious stable branch. Anyone could come check out master and have the latest useable. I am in favor of following the norm, so ideally master should be our stable branch (agreed). The issue is with the transition. Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we could start a stable branch of this tag and build up bug fix releases all the way to 4.5 from there. But all features for 4.5 are already in master. So if we create a 'develop' branch of master and stabilize 'master' then develop is now started from a stable tag (4.4.0). *not* started from a stable tag, and merges will be tricky, no ? So what's the best way to flip ? There is most likely some git magic that can we do. The new git workflow and the transition process need to be part of a proposal that we get consensus on. getting there :) -seb Also, I'm struggling to understand the benefit of cherry-pick. If you completely squash history, you lose a tremendous amount of context, which I use extensively to figure out why a bug is the way it is. Only knowing that the branch was merged at a given point in time doesn't give any context. Seeing the individual commit history of the branch helps to preserve the rationale for why the code was written the way it was. In theory if every change starts out as a branch (feature, hotfix, release), then why not just merge the branch once it is in a good and acceptable state? I also agree with Mike that this will have to be a transition over time. It will take some time to clean up master to the point where it can be considered a solid stable branch. Possibly as part of the 4.5 release. On Wed, Jul 23, 2014 at 10:51 AM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 11:38 AM, daan Hoogland daan.hoogl...@gmail.com
Re: [DISCUSS][PROPOSAL] git workflow
That's where the 4.5-hotfixes branch comes in. On Thu, Jul 24, 2014 at 8:39 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: Hi Daan, here is what i propose: 1. rename 'master' to 'develop’ 2. branch a new 'master' from '4.4’ 3. branch 'RELEASE-4.5' from the develop 4. merge 'RELEASE-4.5' to master once the release voting is done. RELEASE-4.6 branch should be off develop as all the feature branches would be merged there before freeze for 4.6 and would be merged to master when the release is voted. The other question I have is in the step:4. how are we going to manage fixes to 4.5 post branch cut? ( assuming no features as the freeze is done) ~Rajani On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com wrote: Mike, Rajani, Sebastien's point was that the current 4.4 is the closest we have to a releasable branch. I don't mind enting on master but it will require more fixing. In general all of this will require some RM work of all committers. Please ammend my little proposal if you will. On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: I agree with mike. I think we should start 4.5 from where master is now Also create a develop branch from master and continue future work for 4.6 there. I am not clear on how the release branches are going to be maintained. Are we saying we would create 4.5-RELEASE branch which is essentially same as our current -FORWARD branch and continue cherry-picking? I would prefer merges to cherry-picks. Also, I think we should allow committers to commit to the RELEASE branch after discussing about it on dev@ and have RM closely monitor them. Any commit intended for 4.5 RELEASE should be checked in after discussion in the 4.5 Release branch and then merged to develop branch. ~Rajani On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off and then merge features from develop into 4.5. Why don't we instead start 4.5 where master is now with the assumption that since we are past Feature Freeze for 4.5 that master is stable enough? On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: so to start formulate a proposal: all work shall be done in a new branch (it is advisable to prefix your branches with your id) when working, features will be cherry-picked/merged into the release branch they are for and next into master. hotfixes will be done in branchname-hotfixes as transition we will rename 'master' to 'develop' branch a new 'master' from '4.4' branch '4.5' from the new 'master' merge any features from the new 'develop' to '4.5' and 'master' On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote: Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with the norm? If master is the development branch, it might not be stable. I think the goal here is that we have an obvious stable branch. Anyone could come check out master and have the latest useable. I am in favor of following the norm, so ideally master should be our stable branch (agreed). The issue is with the transition. Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we could start a stable branch of this tag and build up bug fix releases all the way to 4.5 from there. But all features for 4.5 are already in master. So if we create a 'develop' branch of master and stabilize 'master' then develop is now started from a stable tag (4.4.0). *not* started from a stable tag, and merges will be tricky, no ? So what's the best way to flip ? There is most likely some git magic that can we do. The new git workflow and the transition process need to be part of a proposal that we get consensus on. getting there :) -seb Also, I'm struggling to understand the benefit of cherry-pick. If you completely squash history, you lose a tremendous amount of context, which I use extensively to figure out why a bug is the way it is. Only knowing that the branch was merged at a given point in time doesn't give any context. Seeing the individual commit history of the branch helps to preserve the rationale for why the code was written the way it was. In theory if every change starts out as a branch (feature, hotfix, release), then why not just merge the branch once it is in a good and acceptable state? I also agree with Mike that this will have to be a transition over time. It will take some time to clean up master to the point where it can be considered a solid stable branch. Possibly as part of the 4.5 release. On Wed, Jul 23, 2014 at 10:51 AM, Sebastien Goasguen
Re: [DISCUSS][PROPOSAL] git workflow
24. juli 2014 08:39 skrev Rajani Karuturi rajani.karut...@citrix.com følgende: Hi Daan, here is what i propose: 1. rename 'master' to 'develop’ 2. branch a new 'master' from '4.4’ 3. branch 'RELEASE-4.5' from the develop 4. merge 'RELEASE-4.5' to master once the release voting is done. RELEASE-4.6 branch should be off develop as all the feature branches would be merged there before freeze for 4.6 and would be merged to master when the release is voted. The other question I have is in the step:4. how are we going to manage fixes to 4.5 post branch cut? ( assuming no features as the freeze is done) Sub releases, ie. 4.4.1, is generally just hotfixes / bugfixes, yes? In that case you can branch it off 'master' and merge back to master as a new release after voting, and merge to develop if the fix is applicable there. Erik ~Rajani On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com wrote: Mike, Rajani, Sebastien's point was that the current 4.4 is the closest we have to a releasable branch. I don't mind enting on master but it will require more fixing. In general all of this will require some RM work of all committers. Please ammend my little proposal if you will. On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: I agree with mike. I think we should start 4.5 from where master is now Also create a develop branch from master and continue future work for 4.6 there. I am not clear on how the release branches are going to be maintained. Are we saying we would create 4.5-RELEASE branch which is essentially same as our current -FORWARD branch and continue cherry-picking? I would prefer merges to cherry-picks. Also, I think we should allow committers to commit to the RELEASE branch after discussing about it on dev@ and have RM closely monitor them. Any commit intended for 4.5 RELEASE should be checked in after discussion in the 4.5 Release branch and then merged to develop branch. ~Rajani On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off and then merge features from develop into 4.5. Why don't we instead start 4.5 where master is now with the assumption that since we are past Feature Freeze for 4.5 that master is stable enough? On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: so to start formulate a proposal: all work shall be done in a new branch (it is advisable to prefix your branches with your id) when working, features will be cherry-picked/merged into the release branch they are for and next into master. hotfixes will be done in branchname-hotfixes as transition we will rename 'master' to 'develop' branch a new 'master' from '4.4' branch '4.5' from the new 'master' merge any features from the new 'develop' to '4.5' and 'master' On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote: Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with the norm? If master is the development branch, it might not be stable. I think the goal here is that we have an obvious stable branch. Anyone could come check out master and have the latest useable. I am in favor of following the norm, so ideally master should be our stable branch (agreed). The issue is with the transition. Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we could start a stable branch of this tag and build up bug fix releases all the way to 4.5 from there. But all features for 4.5 are already in master. So if we create a 'develop' branch of master and stabilize 'master' then develop is now started from a stable tag (4.4.0). *not* started from a stable tag, and merges will be tricky, no ? So what's the best way to flip ? There is most likely some git magic that can we do. The new git workflow and the transition process need to be part of a proposal that we get consensus on. getting there :) -seb Also, I'm struggling to understand the benefit of cherry-pick. If you completely squash history, you lose a tremendous amount of context, which I use extensively to figure out why a bug is the way it is. Only knowing that the branch was merged at a given point in time doesn't give any context. Seeing the individual commit history of the branch helps to preserve the rationale for why the code was written the way it was. In theory if every change starts out as a branch (feature, hotfix, release), then why not just merge the branch once it is in a good and acceptable
Re: [DISCUSS][PROPOSAL] git workflow
On Jul 24, 2014, at 8:39 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: here is what i propose: 1. rename 'master' to 'develop’ 2. branch a new 'master' from '4.4’ 3. branch 'RELEASE-4.5' from the develop 4. merge 'RELEASE-4.5' to master once the release voting is done. I like this conceptually; I’m not sure if its feasible because step 4 requires resolving the cherry-pick mess. Ignoring awsapi (which has a lot of churn) and ignoring formatting changes, here are sizes of very minimalized diffs between branches branch twodiff size big diff chunks branch one 4.3 4.4 11MBhyperv,netscaler,server,engine 4.4 4.4-forward2MBtests,marvin 4.4-forward master 6MBxenapi,xen,xenserver,storage 4.4 master 8MBxenapi,tests,marvin,xen,xenserver (See below how I got the numbers.) Starting git-flow from 4.4 or 4.4-forward and then merging things in from master means processing hundreds of thousands of lines of diff. Of those lines, many many thousands of lines will probably not auto-merge due to the cherry-pick approach. A rebase between any of these branches is not feasible; git cannot un-pick what happened so it cannot offer much assistance. Looking at all the diff stats, breaking xenapi and awsapi out into their own git repositories (and release cycles) seems like a really good thing to do; I expect it will help a lot with future merges. You can try step 4. for yourself now: git checkout 4.4 git merge master Good luck ;-) RELEASE-4.6 branch should be off develop as all the feature branches would be merged there before freeze for 4.6 and would be merged to master when the release is voted. Small note, git-flow tends to use release/ prefixes for release branches. You'd label ‘em master develop feature/nuage-vsp-support feature/frob-the-foo support/license-header-update release/4.5 release/4.6 The other question I have is in the step:4. how are we going to manage fixes to 4.5 post branch cut? ( assuming no features as the freeze is done) Yes that’d be typical with git-flow. Once you create the release branch, all bugfixes that are to make it into that release go onto the release branch _first_ (and _only_ fixes go there), before being merged into develop. With git-flow you don’t really have to call it a “freeze”. Development of new features continues (on their feature branches) uninterrupted even if a release is being cut, and merging of completed features still is exactly the same (to develop) regardless of whether there’s active release branches. On many projects using git-flow there is no rush to try and get features merged before a release cut-off date, because cutting another release is easy and cheap that you can just do one ‘whenever’ to get your feature out there. For cloudstack that’s not quite the case due to the somewhat heavyweight test/release process. What I imagine is that if a feature misses a deadline, and the community decides it wants to include that feature anyway, is rebasing it onto the release branch and merging it ...decide a finished feature goes into 4.5 after all... git branch feature/frob-the-foo-4.5 feature/frob-the-foo git checkout feature/frob-the-foo-4.5 git rebase -i release/4.5 git push origin feature/frob-the-foo-4.5 git checkout release/4.5 git pull --rebase git merge feature/frob-the-foo-4.5 git checkout develop git pull --rebase git merge release/4.5 git push git branch -d feature/frob-the-foo-4.5 git branch -d feature/frob-the-foo There’s little to no chance cloudstack could ever safely decide to do this right now, but a few months down the road, this might become safe enough, especially since the two explicit merge commits allow figuring out what happened, and possibly rolling back if the feature destabilizes the release. Your workflow would be that most tests and most QA work runs on the release branch, while developers switch between release branch and develop branch depending on what they are doing. A developer that is picking up a bug report associated with that release will basically ...get the bug report... git stash save what-I-was-doing git checkout release/4.5 git pull --rebase ...code code code... ...test... git commit git push git checkout develop git merge release/4.5 git push git stash pop what-I-was-doing ...code code code... For bigger amounts of change/experimentation to work on a nasty kind of bug, you might have your own local temporary branch (I almost always do this myself): ...get the bug report... git stash save what-I-was-doing git checkout release/4.5 git pull --ff-only git branch bugfix/CLOUDSTACK-42 release/4.5 git checkout bugfix/CLOUDSTACK-42 ...code code code... git commit ...code code code... git commit ...test... git pull git rebase -i release/4.5 git commit git checkout
Re: [DISCUSS][PROPOSAL] git workflow
On Jul 24, 2014, at 10:45 AM, Daan Hoogland daan.hoogl...@gmail.com wrote: Any advice on our procedure from this, Leo? Yes, to follow all the git-flow defaults [1]. * goal is for master to become stable * new develop which starts from master * create with `git flow init` * ‘abandon’ 4.4 / 4.4-forward * anything in there which is not currently in master gets cherry-picked into develop * accordingly, plan is no 4.4.1 * if 4.4.1 becomes really necessary, create it by cherry-picking from develop * keep 4.3 to produce 4.3.1 then abandon it, too It is important to realize that a git-flow release/4.5 is _not_ the same as an old-style 4.5-forward; a lot more discipline is required. 4.4-forward contains a lot of things which are not purely bugfixes. 4.4-forward has additional tests, lots of changes to test suites, things that should go in 4.4.1 but not 4.4.0, half-merged features that were pulled from 4.4 but remain in 4.4-forward, bugfixes that include refactoring, etc etc. In a git-flow model, those things would go onto feature/ and/or support/ branches, and from there to the develop branch, and definitiely _never_ onto a release branch. It was very hard to get 4.4 stable by cherry-picking from 4.4-forward; the discipline suggested by git-flow is _exactly_ to avoid that difficulty. Note git-flow defaults also include: * feature branches are called feature/feature-thing (don’t put your name in there, its meant to be descriptive!) * release branches are called release/{version} (not RELEASE-{version}) * hotfixes are called hotfix/{version}-name and are based on merge to master (not usually to a release branch, release branches are not hot, hotfixes are patches to previous releases, i.e. 4.5.1, 4.5.2, 4.5.3 will be hotfixes) * everyone can commit on release branches, everyone can merge to develop (generally you don’t need much merging to release branches since the only thing you commit there are bugfixes, you merge _from_ the release branch _to_ the develop branch), merging is _not_ a release manager's job (the release manager might review or approve bugfixes, but its the committer that merges) * no cherry-picking! cheers, Leo [1] unfortunately, the reason I did this analysis work yesterday was to try and find a way to start from 4.4 and go forward from there, first merging in 4.4-forward and then master, but I don’t see that happening On Thu, Jul 24, 2014 at 10:39 AM, Leo Simons lsim...@schubergphilis.com wrote: branch twodiff size big diff chunks branch one 4.3 4.4 11MBhyperv,netscaler,server,engine 4.4 4.4-forward2MBtests,marvin 4.4-forward master 6MBxenapi,xen,xenserver,storage 4.4 master 8MBxenapi,tests,marvin,xen,xenserver (See below how I got the numbers.) Starting git-flow from 4.4 or 4.4-forward and then merging things in from master means processing hundreds of thousands of lines of diff. Of those lines, many many thousands of lines will probably not auto-merge due to the cherry-pick approach. A rebase between any of these branches is not feasible; git cannot un-pick what happened so it cannot offer much assistance.
Re: [DISCUSS][PROPOSAL] git workflow
now we are kind of set back by this unfortunate result of Leo's work. new proposal: We start using git-flow for 4.5/5.0 exclusively. as of then we will use the workflows as describe by him [1] 4.4.x will still be released by manual RM-cherry-picking (yes volunteer dragging his feet) Leo, are you prepared to write up a how-to cwiki page? kind regards, [1] http://markmail.org/message/on2l5n6uaucpuuwf On Thu, Jul 24, 2014 at 11:22 AM, Leo Simons lsim...@schubergphilis.com wrote: On Jul 24, 2014, at 10:45 AM, Daan Hoogland daan.hoogl...@gmail.com wrote: Any advice on our procedure from this, Leo? Yes, to follow all the git-flow defaults [1]. * goal is for master to become stable * new develop which starts from master * create with `git flow init` * ‘abandon’ 4.4 / 4.4-forward * anything in there which is not currently in master gets cherry-picked into develop * accordingly, plan is no 4.4.1 * if 4.4.1 becomes really necessary, create it by cherry-picking from develop * keep 4.3 to produce 4.3.1 then abandon it, too It is important to realize that a git-flow release/4.5 is _not_ the same as an old-style 4.5-forward; a lot more discipline is required. 4.4-forward contains a lot of things which are not purely bugfixes. 4.4-forward has additional tests, lots of changes to test suites, things that should go in 4.4.1 but not 4.4.0, half-merged features that were pulled from 4.4 but remain in 4.4-forward, bugfixes that include refactoring, etc etc. In a git-flow model, those things would go onto feature/ and/or support/ branches, and from there to the develop branch, and definitiely _never_ onto a release branch. It was very hard to get 4.4 stable by cherry-picking from 4.4-forward; the discipline suggested by git-flow is _exactly_ to avoid that difficulty. Note git-flow defaults also include: * feature branches are called feature/feature-thing (don’t put your name in there, its meant to be descriptive!) * release branches are called release/{version} (not RELEASE-{version}) * hotfixes are called hotfix/{version}-name and are based on merge to master (not usually to a release branch, release branches are not hot, hotfixes are patches to previous releases, i.e. 4.5.1, 4.5.2, 4.5.3 will be hotfixes) * everyone can commit on release branches, everyone can merge to develop (generally you don’t need much merging to release branches since the only thing you commit there are bugfixes, you merge _from_ the release branch _to_ the develop branch), merging is _not_ a release manager's job (the release manager might review or approve bugfixes, but its the committer that merges) * no cherry-picking! cheers, Leo [1] unfortunately, the reason I did this analysis work yesterday was to try and find a way to start from 4.4 and go forward from there, first merging in 4.4-forward and then master, but I don’t see that happening On Thu, Jul 24, 2014 at 10:39 AM, Leo Simons lsim...@schubergphilis.com wrote: branch twodiff size big diff chunks branch one 4.3 4.4 11MBhyperv,netscaler,server,engine 4.4 4.4-forward2MBtests,marvin 4.4-forward master 6MBxenapi,xen,xenserver,storage 4.4 master 8MBxenapi,tests,marvin,xen,xenserver (See below how I got the numbers.) Starting git-flow from 4.4 or 4.4-forward and then merging things in from master means processing hundreds of thousands of lines of diff. Of those lines, many many thousands of lines will probably not auto-merge due to the cherry-pick approach. A rebase between any of these branches is not feasible; git cannot un-pick what happened so it cannot offer much assistance. -- Daan
Re: [DISCUSS][PROPOSAL] git workflow
It makes sense to me now. +1 from me one minor thing i would like to add is git-flow doesn’t force you to its naming convention. You can choose any and stick to it. But, it makes sense to use the defaults. ~Rajani On 24-Jul-2014, at 2:52 pm, Leo Simons lsim...@schubergphilis.com wrote: On Jul 24, 2014, at 10:45 AM, Daan Hoogland daan.hoogl...@gmail.com wrote: Any advice on our procedure from this, Leo? Yes, to follow all the git-flow defaults [1]. * goal is for master to become stable * new develop which starts from master * create with `git flow init` * ‘abandon’ 4.4 / 4.4-forward * anything in there which is not currently in master gets cherry-picked into develop * accordingly, plan is no 4.4.1 * if 4.4.1 becomes really necessary, create it by cherry-picking from develop * keep 4.3 to produce 4.3.1 then abandon it, too It is important to realize that a git-flow release/4.5 is _not_ the same as an old-style 4.5-forward; a lot more discipline is required. 4.4-forward contains a lot of things which are not purely bugfixes. 4.4-forward has additional tests, lots of changes to test suites, things that should go in 4.4.1 but not 4.4.0, half-merged features that were pulled from 4.4 but remain in 4.4-forward, bugfixes that include refactoring, etc etc. In a git-flow model, those things would go onto feature/ and/or support/ branches, and from there to the develop branch, and definitiely _never_ onto a release branch. It was very hard to get 4.4 stable by cherry-picking from 4.4-forward; the discipline suggested by git-flow is _exactly_ to avoid that difficulty. Note git-flow defaults also include: * feature branches are called feature/feature-thing (don’t put your name in there, its meant to be descriptive!) * release branches are called release/{version} (not RELEASE-{version}) * hotfixes are called hotfix/{version}-name and are based on merge to master (not usually to a release branch, release branches are not hot, hotfixes are patches to previous releases, i.e. 4.5.1, 4.5.2, 4.5.3 will be hotfixes) * everyone can commit on release branches, everyone can merge to develop (generally you don’t need much merging to release branches since the only thing you commit there are bugfixes, you merge _from_ the release branch _to_ the develop branch), merging is _not_ a release manager's job (the release manager might review or approve bugfixes, but its the committer that merges) * no cherry-picking! cheers, Leo [1] unfortunately, the reason I did this analysis work yesterday was to try and find a way to start from 4.4 and go forward from there, first merging in 4.4-forward and then master, but I don’t see that happening On Thu, Jul 24, 2014 at 10:39 AM, Leo Simons lsim...@schubergphilis.com wrote: branch twodiff size big diff chunks branch one 4.3 4.4 11MBhyperv,netscaler,server,engine 4.4 4.4-forward2MBtests,marvin 4.4-forward master 6MBxenapi,xen,xenserver,storage 4.4 master 8MBxenapi,tests,marvin,xen,xenserver (See below how I got the numbers.) Starting git-flow from 4.4 or 4.4-forward and then merging things in from master means processing hundreds of thousands of lines of diff. Of those lines, many many thousands of lines will probably not auto-merge due to the cherry-pick approach. A rebase between any of these branches is not feasible; git cannot un-pick what happened so it cannot offer much assistance.
Re: [DISCUSS][PROPOSAL] git workflow
On Jul 24, 2014, at 1:19 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: Leo, are you prepared to write up a how-to cwiki page? Sure, though it would be good to get a few provisional +1s before spending a lot of time drawing pretty pictures :) Also, I don’t seem to have edit permissions on https://cwiki.apache.org/confluence/display/CLOUDSTACK/CloudStack+Maintainers+Guide . Can you add ‘lsimons’ to cloudstack confluence? cheers, Leo
Re: [DISCUSS][PROPOSAL] git workflow
On Thu, Jul 24, 2014 at 1:43 PM, Leo Simons lsim...@schubergphilis.com wrote: lsimons has access -- Daan
Re: [DISCUSS][PROPOSAL] git workflow
The best thread I have read in awhile... Good read http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html On Thu, Jul 24, 2014 at 8:06 AM, Daan Hoogland daan.hoogl...@gmail.com wrote: On Thu, Jul 24, 2014 at 1:43 PM, Leo Simons lsim...@schubergphilis.com wrote: lsimons has access -- Daan
Re: [DISCUSS][PROPOSAL] git workflow
On Thu, Jul 24, 2014 at 5:08 PM, Tracy Phillips tracp...@weberize.com wrote: Good read http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html he agrees with our thread that every work sould start with creating a branch, doesn't he. I think we need to say that a lot of times more. Start a new branch when picking up a ticket. Start a new branch when experimenting on a new feature. Start a new branch when bored. -- Daan
Re: [DISCUSS][PROPOSAL] git workflow
Yes, that is what he is saying. Its really the git way. Starting a branch with the ticket-id and short description works best. I think this is what you are looking for https://wiki.diasporafoundation.org/Git_workflow On Thu, Jul 24, 2014 at 12:29 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: On Thu, Jul 24, 2014 at 5:08 PM, Tracy Phillips tracp...@weberize.com wrote: Good read http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html he agrees with our thread that every work sould start with creating a branch, doesn't he. I think we need to say that a lot of times more. Start a new branch when picking up a ticket. Start a new branch when experimenting on a new feature. Start a new branch when bored. -- Daan
RE: [DISCUSS][PROPOSAL] git workflow
I agree, every new ticket should be on a new branch. If you have two changesets you might ever want to merge separately, put them on separate branches. -- Stephen Turner -Original Message- From: Daan Hoogland [mailto:daan.hoogl...@gmail.com] Sent: 24 July 2014 17:30 To: dev Subject: Re: [DISCUSS][PROPOSAL] git workflow On Thu, Jul 24, 2014 at 5:08 PM, Tracy Phillips tracp...@weberize.com wrote: Good read http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html he agrees with our thread that every work sould start with creating a branch, doesn't he. I think we need to say that a lot of times more. Start a new branch when picking up a ticket. Start a new branch when experimenting on a new feature. Start a new branch when bored. -- Daan
Re: [DISCUSS][PROPOSAL] git workflow
If you are on Ubuntu (and who isn't these days... right?), you can install git-flow easily (git-completion is nice as well) aptitude install git-flow git-completion and git-flow command completion is nice https://github.com/bobthecow/git-flow-completion On Thu, Jul 24, 2014 at 12:36 PM, Stephen Turner stephen.tur...@citrix.com wrote: I agree, every new ticket should be on a new branch. If you have two changesets you might ever want to merge separately, put them on separate branches. -- Stephen Turner -Original Message- From: Daan Hoogland [mailto:daan.hoogl...@gmail.com] Sent: 24 July 2014 17:30 To: dev Subject: Re: [DISCUSS][PROPOSAL] git workflow On Thu, Jul 24, 2014 at 5:08 PM, Tracy Phillips tracp...@weberize.com wrote: Good read http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html he agrees with our thread that every work sould start with creating a branch, doesn't he. I think we need to say that a lot of times more. Start a new branch when picking up a ticket. Start a new branch when experimenting on a new feature. Start a new branch when bored. -- Daan
Re: [DISCUSS][PROPOSAL] git workflow
I believe I agree with these steps. A couple questions: Is 'master' simply always going to be equal to what's the most recent version of the code that's in production? Also, would 'develop' be for 4.6 code then and 4.5 code would go directly into RELEASE-4.5? On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: Hi Daan, here is what i propose: 1. rename 'master' to 'develop’ 2. branch a new 'master' from '4.4’ 3. branch 'RELEASE-4.5' from the develop 4. merge 'RELEASE-4.5' to master once the release voting is done. RELEASE-4.6 branch should be off develop as all the feature branches would be merged there before freeze for 4.6 and would be merged to master when the release is voted. The other question I have is in the step:4. how are we going to manage fixes to 4.5 post branch cut? ( assuming no features as the freeze is done) ~Rajani On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com wrote: Mike, Rajani, Sebastien's point was that the current 4.4 is the closest we have to a releasable branch. I don't mind enting on master but it will require more fixing. In general all of this will require some RM work of all committers. Please ammend my little proposal if you will. On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: I agree with mike. I think we should start 4.5 from where master is now Also create a develop branch from master and continue future work for 4.6 there. I am not clear on how the release branches are going to be maintained. Are we saying we would create 4.5-RELEASE branch which is essentially same as our current -FORWARD branch and continue cherry-picking? I would prefer merges to cherry-picks. Also, I think we should allow committers to commit to the RELEASE branch after discussing about it on dev@ and have RM closely monitor them. Any commit intended for 4.5 RELEASE should be checked in after discussion in the 4.5 Release branch and then merged to develop branch. ~Rajani On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off and then merge features from develop into 4.5. Why don't we instead start 4.5 where master is now with the assumption that since we are past Feature Freeze for 4.5 that master is stable enough? On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: so to start formulate a proposal: all work shall be done in a new branch (it is advisable to prefix your branches with your id) when working, features will be cherry-picked/merged into the release branch they are for and next into master. hotfixes will be done in branchname-hotfixes as transition we will rename 'master' to 'develop' branch a new 'master' from '4.4' branch '4.5' from the new 'master' merge any features from the new 'develop' to '4.5' and 'master' On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote: Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with the norm? If master is the development branch, it might not be stable. I think the goal here is that we have an obvious stable branch. Anyone could come check out master and have the latest useable. I am in favor of following the norm, so ideally master should be our stable branch (agreed). The issue is with the transition. Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we could start a stable branch of this tag and build up bug fix releases all the way to 4.5 from there. But all features for 4.5 are already in master. So if we create a 'develop' branch of master and stabilize 'master' then develop is now started from a stable tag (4.4.0). *not* started from a stable tag, and merges will be tricky, no ? So what's the best way to flip ? There is most likely some git magic that can we do. The new git workflow and the transition process need to be part of a proposal that we get consensus on. getting there :) -seb Also, I'm struggling to understand the benefit of cherry-pick. If you completely squash history, you lose a tremendous amount of context, which I use extensively to figure out why a bug is the way it is. Only knowing that the branch was merged at a given point in time doesn't give any context. Seeing the individual commit history of the branch helps to preserve the rationale for why the code was written the way it was. In theory if every change starts out as a branch (feature, hotfix, release), then why not
Re: [DISCUSS][PROPOSAL] git workflow
On 24-Jul-2014, at 10:25 pm, Mike Tutkowski mike.tutkow...@solidfire.com wrote: I believe I agree with these steps. A couple questions: Is 'master' simply always going to be equal to what's the most recent version of the code that's in production? I think so. master will always be at the latest release and all the previous releases properly tagged. The release branches would be deleted once release is done. Also, would 'develop' be for 4.6 code then and 4.5 code would go directly into RELEASE-4.5? Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes should be done on the 4.5 branch. ~Rajani On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: Hi Daan, here is what i propose: 1. rename 'master' to 'develop’ 2. branch a new 'master' from '4.4’ 3. branch 'RELEASE-4.5' from the develop 4. merge 'RELEASE-4.5' to master once the release voting is done. RELEASE-4.6 branch should be off develop as all the feature branches would be merged there before freeze for 4.6 and would be merged to master when the release is voted. The other question I have is in the step:4. how are we going to manage fixes to 4.5 post branch cut? ( assuming no features as the freeze is done) ~Rajani On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com wrote: Mike, Rajani, Sebastien's point was that the current 4.4 is the closest we have to a releasable branch. I don't mind enting on master but it will require more fixing. In general all of this will require some RM work of all committers. Please ammend my little proposal if you will. On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: I agree with mike. I think we should start 4.5 from where master is now Also create a develop branch from master and continue future work for 4.6 there. I am not clear on how the release branches are going to be maintained. Are we saying we would create 4.5-RELEASE branch which is essentially same as our current -FORWARD branch and continue cherry-picking? I would prefer merges to cherry-picks. Also, I think we should allow committers to commit to the RELEASE branch after discussing about it on dev@ and have RM closely monitor them. Any commit intended for 4.5 RELEASE should be checked in after discussion in the 4.5 Release branch and then merged to develop branch. ~Rajani On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off and then merge features from develop into 4.5. Why don't we instead start 4.5 where master is now with the assumption that since we are past Feature Freeze for 4.5 that master is stable enough? On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: so to start formulate a proposal: all work shall be done in a new branch (it is advisable to prefix your branches with your id) when working, features will be cherry-picked/merged into the release branch they are for and next into master. hotfixes will be done in branchname-hotfixes as transition we will rename 'master' to 'develop' branch a new 'master' from '4.4' branch '4.5' from the new 'master' merge any features from the new 'develop' to '4.5' and 'master' On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote: Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with the norm? If master is the development branch, it might not be stable. I think the goal here is that we have an obvious stable branch. Anyone could come check out master and have the latest useable. I am in favor of following the norm, so ideally master should be our stable branch (agreed). The issue is with the transition. Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we could start a stable branch of this tag and build up bug fix releases all the way to 4.5 from there. But all features for 4.5 are already in master. So if we create a 'develop' branch of master and stabilize 'master' then develop is now started from a stable tag (4.4.0). *not* started from a stable tag, and merges will be tricky, no ? So what's the best way to flip ? There is most likely some git magic that can we do. The new git workflow and the transition process need to be part of a proposal that we get consensus on. getting there :) -seb Also, I'm struggling to understand the benefit of cherry-pick. If you completely squash history, you lose a tremendous amount of context, which I use extensively to figure out why a bug is the way it is. Only
Re: [DISCUSS][PROPOSAL] git workflow
Great. Well, this seems reasonable to me then. If there are no objections or further comments, when can this be done and who would do it? Thanks On Thu, Jul 24, 2014 at 10:01 PM, Rajani Karuturi rajani.karut...@citrix.com wrote: On 24-Jul-2014, at 10:25 pm, Mike Tutkowski mike.tutkow...@solidfire.com wrote: I believe I agree with these steps. A couple questions: Is 'master' simply always going to be equal to what's the most recent version of the code that's in production? I think so. master will always be at the latest release and all the previous releases properly tagged. The release branches would be deleted once release is done. Also, would 'develop' be for 4.6 code then and 4.5 code would go directly into RELEASE-4.5? Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes should be done on the 4.5 branch. ~Rajani On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: Hi Daan, here is what i propose: 1. rename 'master' to 'develop’ 2. branch a new 'master' from '4.4’ 3. branch 'RELEASE-4.5' from the develop 4. merge 'RELEASE-4.5' to master once the release voting is done. RELEASE-4.6 branch should be off develop as all the feature branches would be merged there before freeze for 4.6 and would be merged to master when the release is voted. The other question I have is in the step:4. how are we going to manage fixes to 4.5 post branch cut? ( assuming no features as the freeze is done) ~Rajani On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com wrote: Mike, Rajani, Sebastien's point was that the current 4.4 is the closest we have to a releasable branch. I don't mind enting on master but it will require more fixing. In general all of this will require some RM work of all committers. Please ammend my little proposal if you will. On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: I agree with mike. I think we should start 4.5 from where master is now Also create a develop branch from master and continue future work for 4.6 there. I am not clear on how the release branches are going to be maintained. Are we saying we would create 4.5-RELEASE branch which is essentially same as our current -FORWARD branch and continue cherry-picking? I would prefer merges to cherry-picks. Also, I think we should allow committers to commit to the RELEASE branch after discussing about it on dev@ and have RM closely monitor them. Any commit intended for 4.5 RELEASE should be checked in after discussion in the 4.5 Release branch and then merged to develop branch. ~Rajani On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off and then merge features from develop into 4.5. Why don't we instead start 4.5 where master is now with the assumption that since we are past Feature Freeze for 4.5 that master is stable enough? On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: so to start formulate a proposal: all work shall be done in a new branch (it is advisable to prefix your branches with your id) when working, features will be cherry-picked/merged into the release branch they are for and next into master. hotfixes will be done in branchname-hotfixes as transition we will rename 'master' to 'develop' branch a new 'master' from '4.4' branch '4.5' from the new 'master' merge any features from the new 'develop' to '4.5' and 'master' On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote: Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with the norm? If master is the development branch, it might not be stable. I think the goal here is that we have an obvious stable branch. Anyone could come check out master and have the latest useable. I am in favor of following the norm, so ideally master should be our stable branch (agreed). The issue is with the transition. Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we could start a stable branch of this tag and build up bug fix releases all the way to 4.5 from there. But all features for 4.5 are already in master. So if we create a 'develop' branch of master and stabilize 'master' then develop is now started from a stable tag (4.4.0). *not* started from a stable tag, and merges will be tricky, no ? So what's the best way to flip ? There is most likely some git magic that can we do.
Re: [DISCUSS][PROPOSAL] git workflow
I suppose we need a formal VOTE on this? If so, perhaps Sebastien would like to call it. On Thu, Jul 24, 2014 at 10:06 PM, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Great. Well, this seems reasonable to me then. If there are no objections or further comments, when can this be done and who would do it? Thanks On Thu, Jul 24, 2014 at 10:01 PM, Rajani Karuturi rajani.karut...@citrix.com wrote: On 24-Jul-2014, at 10:25 pm, Mike Tutkowski mike.tutkow...@solidfire.com wrote: I believe I agree with these steps. A couple questions: Is 'master' simply always going to be equal to what's the most recent version of the code that's in production? I think so. master will always be at the latest release and all the previous releases properly tagged. The release branches would be deleted once release is done. Also, would 'develop' be for 4.6 code then and 4.5 code would go directly into RELEASE-4.5? Yes. 4.6 work should be done on develop branch and any 4.5 bug fixes should be done on the 4.5 branch. ~Rajani On Thu, Jul 24, 2014 at 12:39 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: Hi Daan, here is what i propose: 1. rename 'master' to 'develop’ 2. branch a new 'master' from '4.4’ 3. branch 'RELEASE-4.5' from the develop 4. merge 'RELEASE-4.5' to master once the release voting is done. RELEASE-4.6 branch should be off develop as all the feature branches would be merged there before freeze for 4.6 and would be merged to master when the release is voted. The other question I have is in the step:4. how are we going to manage fixes to 4.5 post branch cut? ( assuming no features as the freeze is done) ~Rajani On 24-Jul-2014, at 11:52 am, Daan Hoogland daan.hoogl...@gmail.com wrote: Mike, Rajani, Sebastien's point was that the current 4.4 is the closest we have to a releasable branch. I don't mind enting on master but it will require more fixing. In general all of this will require some RM work of all committers. Please ammend my little proposal if you will. On Thu, Jul 24, 2014 at 6:27 AM, Rajani Karuturi rajani.karut...@citrix.com wrote: I agree with mike. I think we should start 4.5 from where master is now Also create a develop branch from master and continue future work for 4.6 there. I am not clear on how the release branches are going to be maintained. Are we saying we would create 4.5-RELEASE branch which is essentially same as our current -FORWARD branch and continue cherry-picking? I would prefer merges to cherry-picks. Also, I think we should allow committers to commit to the RELEASE branch after discussing about it on dev@ and have RM closely monitor them. Any commit intended for 4.5 RELEASE should be checked in after discussion in the 4.5 Release branch and then merged to develop branch. ~Rajani On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off and then merge features from develop into 4.5. Why don't we instead start 4.5 where master is now with the assumption that since we are past Feature Freeze for 4.5 that master is stable enough? On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: so to start formulate a proposal: all work shall be done in a new branch (it is advisable to prefix your branches with your id) when working, features will be cherry-picked/merged into the release branch they are for and next into master. hotfixes will be done in branchname-hotfixes as transition we will rename 'master' to 'develop' branch a new 'master' from '4.4' branch '4.5' from the new 'master' merge any features from the new 'develop' to '4.5' and 'master' On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote: Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with the norm? If master is the development branch, it might not be stable. I think the goal here is that we have an obvious stable branch. Anyone could come check out master and have the latest useable. I am in favor of following the norm, so ideally master should be our stable branch (agreed). The issue is with the transition. Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we could start a stable branch of this tag and build up bug fix releases all the way to 4.5 from there. But all features for 4.5 are already in master. So if we create a 'develop' branch of master and stabilize 'master' then develop is now started from
Re: [DISCUSS][PROPOSAL] git workflow
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
Re: [DISCUSS][PROPOSAL] git workflow
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 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
Re: [DISCUSS][PROPOSAL] git workflow
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
Re: [DISCUSS][PROPOSAL] git workflow
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. 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. 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
Re: [DISCUSS][PROPOSAL] git workflow
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
Re: [DISCUSS][PROPOSAL] git workflow
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.
Re: [DISCUSS][PROPOSAL] git workflow
Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with the norm? If master is the development branch, it might not be stable. I think the goal here is that we have an obvious stable branch. Anyone could come check out master and have the latest useable. Also, I'm struggling to understand the benefit of cherry-pick. If you completely squash history, you lose a tremendous amount of context, which I use extensively to figure out why a bug is the way it is. Only knowing that the branch was merged at a given point in time doesn't give any context. Seeing the individual commit history of the branch helps to preserve the rationale for why the code was written the way it was. In theory if every change starts out as a branch (feature, hotfix, release), then why not just merge the branch once it is in a good and acceptable state? I also agree with Mike that this will have to be a transition over time. It will take some time to clean up master to the point where it can be considered a solid stable branch. Possibly as part of the 4.5 release. On Wed, Jul 23, 2014 at 10: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
Re: [DISCUSS][PROPOSAL] git workflow
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
Re: [DISCUSS][PROPOSAL] git workflow
On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote: Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with the norm? If master is the development branch, it might not be stable. I think the goal here is that we have an obvious stable branch. Anyone could come check out master and have the latest useable. I am in favor of following the norm, so ideally master should be our stable branch (agreed). The issue is with the transition. Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we could start a stable branch of this tag and build up bug fix releases all the way to 4.5 from there. But all features for 4.5 are already in master. So if we create a 'develop' branch of master and stabilize 'master' then develop is now started from a stable tag (4.4.0). So what's the best way to flip ? There is most likely some git magic that can we do. The new git workflow and the transition process need to be part of a proposal that we get consensus on. getting there :) -seb Also, I'm struggling to understand the benefit of cherry-pick. If you completely squash history, you lose a tremendous amount of context, which I use extensively to figure out why a bug is the way it is. Only knowing that the branch was merged at a given point in time doesn't give any context. Seeing the individual commit history of the branch helps to preserve the rationale for why the code was written the way it was. In theory if every change starts out as a branch (feature, hotfix, release), then why not just merge the branch once it is in a good and acceptable state? I also agree with Mike that this will have to be a transition over time. It will take some time to clean up master to the point where it can be considered a solid stable branch. Possibly as part of the 4.5 release. On Wed, Jul 23, 2014 at 10: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
Re: [DISCUSS][PROPOSAL] git workflow
On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote: Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with the norm? If master is the development branch, it might not be stable. I think the goal here is that we have an obvious stable branch. Anyone could come check out master and have the latest useable. I am in favor of following the norm, so ideally master should be our stable branch (agreed). The issue is with the transition. Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we could start a stable branch of this tag and build up bug fix releases all the way to 4.5 from there. But all features for 4.5 are already in master. So if we create a 'develop' branch of master and stabilize 'master' then develop is now started from a stable tag (4.4.0). *not* started from a stable tag, and merges will be tricky, no ? So what's the best way to flip ? There is most likely some git magic that can we do. The new git workflow and the transition process need to be part of a proposal that we get consensus on. getting there :) -seb Also, I'm struggling to understand the benefit of cherry-pick. If you completely squash history, you lose a tremendous amount of context, which I use extensively to figure out why a bug is the way it is. Only knowing that the branch was merged at a given point in time doesn't give any context. Seeing the individual commit history of the branch helps to preserve the rationale for why the code was written the way it was. In theory if every change starts out as a branch (feature, hotfix, release), then why not just merge the branch once it is in a good and acceptable state? I also agree with Mike that this will have to be a transition over time. It will take some time to clean up master to the point where it can be considered a solid stable branch. Possibly as part of the 4.5 release. On Wed, Jul 23, 2014 at 10: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
Re: [DISCUSS][PROPOSAL] git workflow
Must it start today, or when (if) the vote passes? Feature freeze for 4.5 has theoretically passed, so basically master branch should now be work in progress towards a stable branch. So I'd say; create a 'develop' branch off the current master. Keep master as is, and only merge bugfixes until it is deemed stable and 4.5 is released. 4.6 development and new features goes into branches of 'develop'. Erik 23. juli 2014 18:30 skrev Sebastien Goasguen run...@gmail.com følgende: On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote: Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with the norm? If master is the development branch, it might not be stable. I think the goal here is that we have an obvious stable branch. Anyone could come check out master and have the latest useable. I am in favor of following the norm, so ideally master should be our stable branch (agreed). The issue is with the transition. Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we could start a stable branch of this tag and build up bug fix releases all the way to 4.5 from there. But all features for 4.5 are already in master. So if we create a 'develop' branch of master and stabilize 'master' then develop is now started from a stable tag (4.4.0). So what's the best way to flip ? There is most likely some git magic that can we do. The new git workflow and the transition process need to be part of a proposal that we get consensus on. getting there :) -seb Also, I'm struggling to understand the benefit of cherry-pick. If you completely squash history, you lose a tremendous amount of context, which I use extensively to figure out why a bug is the way it is. Only knowing that the branch was merged at a given point in time doesn't give any context. Seeing the individual commit history of the branch helps to preserve the rationale for why the code was written the way it was. In theory if every change starts out as a branch (feature, hotfix, release), then why not just merge the branch once it is in a good and acceptable state? I also agree with Mike that this will have to be a transition over time. It will take some time to clean up master to the point where it can be considered a solid stable branch. Possibly as part of the 4.5 release. On Wed, Jul 23, 2014 at 10: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,
Re: [DISCUSS][PROPOSAL] git workflow
Right, 'master' should - theoretically - be somewhat stable at present as we are post 4.5 Feature Freeze. I guess we should address Daan's question of what 'develop' means in this new model? When can code be checked into 'develop', but not 'master'? Code that goes into 'master' must be deemed 'stable.' What about 'develop'? Why do we have it if we're using our own branches for development? Thanks for clarifying. On Wed, Jul 23, 2014 at 11:01 AM, Erik Weber terbol...@gmail.com wrote: Must it start today, or when (if) the vote passes? Feature freeze for 4.5 has theoretically passed, so basically master branch should now be work in progress towards a stable branch. So I'd say; create a 'develop' branch off the current master. Keep master as is, and only merge bugfixes until it is deemed stable and 4.5 is released. 4.6 development and new features goes into branches of 'develop'. Erik 23. juli 2014 18:30 skrev Sebastien Goasguen run...@gmail.com følgende: On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote: Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with the norm? If master is the development branch, it might not be stable. I think the goal here is that we have an obvious stable branch. Anyone could come check out master and have the latest useable. I am in favor of following the norm, so ideally master should be our stable branch (agreed). The issue is with the transition. Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we could start a stable branch of this tag and build up bug fix releases all the way to 4.5 from there. But all features for 4.5 are already in master. So if we create a 'develop' branch of master and stabilize 'master' then develop is now started from a stable tag (4.4.0). So what's the best way to flip ? There is most likely some git magic that can we do. The new git workflow and the transition process need to be part of a proposal that we get consensus on. getting there :) -seb Also, I'm struggling to understand the benefit of cherry-pick. If you completely squash history, you lose a tremendous amount of context, which I use extensively to figure out why a bug is the way it is. Only knowing that the branch was merged at a given point in time doesn't give any context. Seeing the individual commit history of the branch helps to preserve the rationale for why the code was written the way it was. In theory if every change starts out as a branch (feature, hotfix, release), then why not just merge the branch once it is in a good and acceptable state? I also agree with Mike that this will have to be a transition over time. It will take some time to clean up master to the point where it can be considered a solid stable branch. Possibly as part of the 4.5 release. On Wed, Jul 23, 2014 at 10: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,
Re: [DISCUSS][PROPOSAL] git workflow
so to start formulate a proposal: all work shall be done in a new branch (it is advisable to prefix your branches with your id) when working, features will be cherry-picked/merged into the release branch they are for and next into master. hotfixes will be done in branchname-hotfixes as transition we will rename 'master' to 'develop' branch a new 'master' from '4.4' branch '4.5' from the new 'master' merge any features from the new 'develop' to '4.5' and 'master' On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote: Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with the norm? If master is the development branch, it might not be stable. I think the goal here is that we have an obvious stable branch. Anyone could come check out master and have the latest useable. I am in favor of following the norm, so ideally master should be our stable branch (agreed). The issue is with the transition. Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we could start a stable branch of this tag and build up bug fix releases all the way to 4.5 from there. But all features for 4.5 are already in master. So if we create a 'develop' branch of master and stabilize 'master' then develop is now started from a stable tag (4.4.0). *not* started from a stable tag, and merges will be tricky, no ? So what's the best way to flip ? There is most likely some git magic that can we do. The new git workflow and the transition process need to be part of a proposal that we get consensus on. getting there :) -seb Also, I'm struggling to understand the benefit of cherry-pick. If you completely squash history, you lose a tremendous amount of context, which I use extensively to figure out why a bug is the way it is. Only knowing that the branch was merged at a given point in time doesn't give any context. Seeing the individual commit history of the branch helps to preserve the rationale for why the code was written the way it was. In theory if every change starts out as a branch (feature, hotfix, release), then why not just merge the branch once it is in a good and acceptable state? I also agree with Mike that this will have to be a transition over time. It will take some time to clean up master to the point where it can be considered a solid stable branch. Possibly as part of the 4.5 release. On Wed, Jul 23, 2014 at 10: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
Re: [DISCUSS][PROPOSAL] git workflow
Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off and then merge features from develop into 4.5. Why don't we instead start 4.5 where master is now with the assumption that since we are past Feature Freeze for 4.5 that master is stable enough? On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: so to start formulate a proposal: all work shall be done in a new branch (it is advisable to prefix your branches with your id) when working, features will be cherry-picked/merged into the release branch they are for and next into master. hotfixes will be done in branchname-hotfixes as transition we will rename 'master' to 'develop' branch a new 'master' from '4.4' branch '4.5' from the new 'master' merge any features from the new 'develop' to '4.5' and 'master' On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote: Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with the norm? If master is the development branch, it might not be stable. I think the goal here is that we have an obvious stable branch. Anyone could come check out master and have the latest useable. I am in favor of following the norm, so ideally master should be our stable branch (agreed). The issue is with the transition. Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we could start a stable branch of this tag and build up bug fix releases all the way to 4.5 from there. But all features for 4.5 are already in master. So if we create a 'develop' branch of master and stabilize 'master' then develop is now started from a stable tag (4.4.0). *not* started from a stable tag, and merges will be tricky, no ? So what's the best way to flip ? There is most likely some git magic that can we do. The new git workflow and the transition process need to be part of a proposal that we get consensus on. getting there :) -seb Also, I'm struggling to understand the benefit of cherry-pick. If you completely squash history, you lose a tremendous amount of context, which I use extensively to figure out why a bug is the way it is. Only knowing that the branch was merged at a given point in time doesn't give any context. Seeing the individual commit history of the branch helps to preserve the rationale for why the code was written the way it was. In theory if every change starts out as a branch (feature, hotfix, release), then why not just merge the branch once it is in a good and acceptable state? I also agree with Mike that this will have to be a transition over time. It will take some time to clean up master to the point where it can be considered a solid stable branch. Possibly as part of the 4.5 release. On Wed, Jul 23, 2014 at 10: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
Re: [DISCUSS][PROPOSAL] git workflow
I agree with mike. I think we should start 4.5 from where master is now Also create a develop branch from master and continue future work for 4.6 there. I am not clear on how the release branches are going to be maintained. Are we saying we would create 4.5-RELEASE branch which is essentially same as our current -FORWARD branch and continue cherry-picking? I would prefer merges to cherry-picks. Also, I think we should allow committers to commit to the RELEASE branch after discussing about it on dev@ and have RM closely monitor them. Any commit intended for 4.5 RELEASE should be checked in after discussion in the 4.5 Release branch and then merged to develop branch. ~Rajani On 24-Jul-2014, at 1:14 am, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Per earlier e-mails, I don't think we want to start 4.5 where 4.4 left off and then merge features from develop into 4.5. Why don't we instead start 4.5 where master is now with the assumption that since we are past Feature Freeze for 4.5 that master is stable enough? On Wed, Jul 23, 2014 at 12:56 PM, Daan Hoogland daan.hoogl...@gmail.com wrote: so to start formulate a proposal: all work shall be done in a new branch (it is advisable to prefix your branches with your id) when working, features will be cherry-picked/merged into the release branch they are for and next into master. hotfixes will be done in branchname-hotfixes as transition we will rename 'master' to 'develop' branch a new 'master' from '4.4' branch '4.5' from the new 'master' merge any features from the new 'develop' to '4.5' and 'master' On Wed, Jul 23, 2014 at 6:39 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:30 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 23, 2014, at 12:21 PM, Nate Gordon nate.gor...@appcore.com wrote: Let me ask the question, why have master be develop and a release branch be master? If we are going to follow gitflow, why not just stick with the norm? If master is the development branch, it might not be stable. I think the goal here is that we have an obvious stable branch. Anyone could come check out master and have the latest useable. I am in favor of following the norm, so ideally master should be our stable branch (agreed). The issue is with the transition. Our latest releasable product is the 4.4 branch (4.4.0 tag), so ideally we could start a stable branch of this tag and build up bug fix releases all the way to 4.5 from there. But all features for 4.5 are already in master. So if we create a 'develop' branch of master and stabilize 'master' then develop is now started from a stable tag (4.4.0). *not* started from a stable tag, and merges will be tricky, no ? So what's the best way to flip ? There is most likely some git magic that can we do. The new git workflow and the transition process need to be part of a proposal that we get consensus on. getting there :) -seb Also, I'm struggling to understand the benefit of cherry-pick. If you completely squash history, you lose a tremendous amount of context, which I use extensively to figure out why a bug is the way it is. Only knowing that the branch was merged at a given point in time doesn't give any context. Seeing the individual commit history of the branch helps to preserve the rationale for why the code was written the way it was. In theory if every change starts out as a branch (feature, hotfix, release), then why not just merge the branch once it is in a good and acceptable state? I also agree with Mike that this will have to be a transition over time. It will take some time to clean up master to the point where it can be considered a solid stable branch. Possibly as part of the 4.5 release. On Wed, Jul 23, 2014 at 10: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
Re: [DISCUSS][PROPOSAL] git workflow
On 01/07/14 3:39 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. At Citrix we are able to run CI with BVTs. The system of classification of tests has enabled us to run around 70% of the BVTs on simulator. A single cycle takes less than 3 hours to run. This can be further optimised. These 70% of the simulated tests can be run in dev environment[1]. There are two things that community can do: 1. In short run for any feature commit, mandate that at least the developers have run the simulator based tests before the merge request. 2. Get the required hardware and have a self service interface available where devs can run the test on their feature branch. 3. Contribute test cases; now simulator also provides a way to check failure scenarios [2] [1] https://cwiki.apache.org/confluence/display/CLOUDSTACK/Validating+check-ins +for+your+local+changes%2C+using+Simulator [2] https://cwiki.apache.org/confluence/display/CLOUDSTACK/Writing+tests+levera ging+the+simulator+enhancements -abhi 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
Re: [DISCUSS][PROPOSAL] git workflow
Hi, Rajani Karuturi wrote: In my first email, I mentioned a youtube url[1] which is a google tech talk by Laura Wingerd [2] of Perforce Software I recommend watching it as well. (its a 55 min video). [1] https://www.youtube.com/watch?v=AJ-CpGsCpM0 [2] http://www.perforce.com/blog/author/lwingerd ~Rajani Thanks for sharing this again Rajani, I saw the video it was insightful. Here are the slides: (link on youtube was broken) http://web.archive.org/web/20061019021704/http://www.perforce.com/perforce/conferences/us/2005/presentations/Wingerd.pdf Let me share the key points from the shared talk: - The speaker uses analogy of ease of driving cars on complex layout of roads to developing software using a SCM. - She recommends a mainline model which could speed up development and release process. (refer the slides) We have branches -- mainline (master), release (release branches) and development (feature work, refactoring etc). - Tofu scale: released/stable branches are firmer, unstable/master ones are soft. - She defines a baseline protocol: the soft branches are those which are not tested and development work is going on, the firm ones are those which are set to release or are already released or are live. The protocol is to let the commit/changes flow from soft to firm branches wrt to a baseline (master) only when they firm-er or tested and continually changes flow from firm ones to soft ones (i.e. you rebase or cherry-pick often from firm branches to soft ones). Change flows between branch and baseline - Always accept stable changes over destabilizing change - She suggests to view the branches wrt baseline as a map, where changes follow the baseline protocol and fix on an old trickle downs to chronological release branches, then to baseline (master) and to rest of the feature branches continually. - She spoke about module, file tree etc. which I think is not relevant for git users. We've git submodules and subtrees but IMO it's out of the scope unless we want to split our repo. - Merge down, copy up: She shares an interesting approach to deliver feature work/project to firmer baseline branch which requires you to first get all the changes from baselines (master above, in git terms that would be merge/rebase or cherry-picking from master to feature branch) and then copy the files from the feature branch to baseline (not merge). Then test and have the code/files in baseline (master). My thoughts and suggestions: - We adapt and adopt the baseline protocol (discuss?) wrt ACS - We don't commit on master directly, break master. In future, have master to be stable enough for anyone to branch off and work. - Anyone fixing anything on master or other release/QA branches creates a feature/topic branch and work on it, and merge/cherry-pick changes back to upper branches only when that branch is well tested. - Feature branches branch off master or other feature branches, not release branches. Bug fix branches branch off from the oldest release branch (on which we need to fix it) and the test fix lands to that branch and subsequent release branches and then to master and other feature branches. - Suggestion for a better release protocol: All releases have tags. We value tags more than release branch names. A vote is requested on a release branch's commit with a version plus -RC, -beta and other suitable name tag. Once vote is passed, the tag is the version number this is the actual release. Git allows multiple tags can be on a commit so we're good. Developers have freedmo to land but only bug fixes (once fully tested) on release branches from a bugfix branch branched off from the release branch or (by cherry-picking from) older release branches. Then the bugfix lands to master and other feature branches continually. This would also require that tags are immutable (you don't change/delete them once created and pushed). IMHO this will speed up development process. - One thing I'm still struggling with is working with branches/releases which has fair amount of refactoring and rearchitecture work, which is where changes would need to be manually ported and fixed. I don't have any idea how to deal with it automatically, with git or any other tool. On 09-Jul-2014, at 3:52 am, Sebastien Goasguenrun...@gmail.commailto:run...@gmail.com wrote: This is also a good read, against cherry-picking (back to Rajani's original point): http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html (even wondering if Rohit did not send this to the list already…) I do not remember sharing this, but I've read posts like this before and I think it's just the author's opinion and not universal truth. In my experience, if you rebase your source branch and cherry pick on target there is no issue or conflicts (as suggested by this articles). If merge/rebase is required I prefer no-ff and ignore-whitespace flags. Merging IMHO is a quick and easy solution but it clutters the history, while
Re: [DISCUSS][PROPOSAL] git workflow
Hi, On Tue, Jul 1, 2014 at 3:39 AM, Sebastien Goasguen run...@gmail.com wrote: I would like to re-start this discussion. Such a shame, this is not getting any attention. 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. I think too that this is going to take time, meanwhile a great way would be to self police? I would encourage every committer at least to learn to use git, handle git mess-ups, have a knowledge about various ACS 4.x branches, favour squashed commits and cherry-picking over branch merges, rebase on target branch (master) regularly, build often with unit tests before pushing to master (at least), test patches on local before merging them on master and other branches. @PMC: suggestion -- help drive defining a convention on committer workflow (refer nvie etc.), make it a requirement for all the committers (future and present) to learn/know (basic/novice) git, have knowledge about various ACS branches and release processes. Comments, suggestions? Regards. 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 developetc 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
Re: [DISCUSS][PROPOSAL] git workflow
Rohit, I agree with most and I am glad to see you prefer cherry-pick over merges. I do not see why the PMC should drive defining the standard. This is something that should be carried and cherished by all developers. On Tue, Jul 8, 2014 at 9:51 AM, Rohit Yadav bhais...@apache.org wrote: Hi, On Tue, Jul 1, 2014 at 3:39 AM, Sebastien Goasguen run...@gmail.com wrote: I would like to re-start this discussion. Such a shame, this is not getting any attention. 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. I think too that this is going to take time, meanwhile a great way would be to self police? I would encourage every committer at least to learn to use git, handle git mess-ups, have a knowledge about various ACS 4.x branches, favour squashed commits and cherry-picking over branch merges, rebase on target branch (master) regularly, build often with unit tests before pushing to master (at least), test patches on local before merging them on master and other branches. @PMC: suggestion -- help drive defining a convention on committer workflow (refer nvie etc.), make it a requirement for all the committers (future and present) to learn/know (basic/novice) git, have knowledge about various ACS branches and release processes. Comments, suggestions? Regards. 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 developetc 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.
Re: [DISCUSS][PROPOSAL] git workflow
Thanks for bringing this up again, Sebastien. I've had http://nvie.com/posts/a-successful-git-branching-model/ up in Chrome since you sent that link and been reading through it a bit here and there, but have just been too busy as of late to give it a bunch of thought. I agree, though, that we should really think about moving to another model of using Git as it is not un-common for master to be broken, which leads to a lot of lost development time for many people. On Mon, Jun 30, 2014 at 4:09 PM, 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]
Re: [DISCUSS][PROPOSAL] git workflow
As someone who has worked with a number of different version control systems (and have far more love for git than any other), I'm curious as to why we would want to fight what I've always seen as the core feature of git. Branching and merging. The gitflow model is incredibly useful for keeping track of a number of different development paths concurrently. Branches remained organized and have a clear destination and workflow that they need to go through as part of the merging process. We use it internally (on a much smaller team) with great success. And with the difficulties I've seen on the mailing list around the -forward branches and cherry-picking, I'm curious as to why this is the preferred method. From everything I've read about git and cherry-picking, it is a copy of the commit, not a reference to the original commit. This makes it hard to track down an individual change to find the original source. Thanks, -Nate On Tue, Jul 8, 2014 at 11:04 AM, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Thanks for bringing this up again, Sebastien. I've had http://nvie.com/posts/a-successful-git-branching-model/ up in Chrome since you sent that link and been reading through it a bit here and there, but have just been too busy as of late to give it a bunch of thought. I agree, though, that we should really think about moving to another model of using Git as it is not un-common for master to be broken, which leads to a lot of lost development time for many people. On Mon, Jun 30, 2014 at 4:09 PM, 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
Re: [DISCUSS][PROPOSAL] git workflow
Hi, Daan Hoogland wrote: I do not see why the PMC should drive defining the standard. This is something that should be carried and cherished by all developers. In my experience when something is everyone's responsibility, eventually no one is responsible for it. I think the PMC should drive it because IMHO the PMC comprises of our project management folks who have decision making powers and are officially responsible for the project as recognized by the ASF [1]. Therefore, I'm requesting our PMC to come up with a convention along with committers/developers on this issue and enforce it using some tooling etc. [1] http://www.apache.org/dev/pmc.htm Regards, Rohit Yadav Software Architect, ShapeBlue M. +91 88 262 30892 | rohit.ya...@shapeblue.com Blog: bhaisaab.org | Twitter: @_bhaisaab Find out more about ShapeBlue and our range of CloudStack related services IaaS Cloud Design Buildhttp://shapeblue.com/iaas-cloud-design-and-build// CSForge – rapid IaaS deployment frameworkhttp://shapeblue.com/csforge/ CloudStack Consultinghttp://shapeblue.com/cloudstack-consultancy/ CloudStack Infrastructure Supporthttp://shapeblue.com/cloudstack-infrastructure-support/ CloudStack Bootcamp Training Courseshttp://shapeblue.com/cloudstack-training/ This email and any attachments to it may be confidential and are intended solely for the use of the individual to whom it is addressed. Any views or opinions expressed are solely those of the author and do not necessarily represent those of Shape Blue Ltd or related companies. If you are not the intended recipient of this email, you must neither take any action based upon its contents, nor copy or show it to anyone. Please contact the sender if you believe you have received this email in error. Shape Blue Ltd is a company incorporated in England Wales. ShapeBlue Services India LLP is a company incorporated in India and is operated under license from Shape Blue Ltd. Shape Blue Brasil Consultoria Ltda is a company incorporated in Brasil and is operated under license from Shape Blue Ltd. ShapeBlue is a registered trademark.
Re: [DISCUSS][PROPOSAL] git workflow
On Tue, Jul 8, 2014 at 3:30 PM, Rohit Yadav rohit.ya...@shapeblue.com wrote: Hi, Daan Hoogland wrote: I do not see why the PMC should drive defining the standard. This is something that should be carried and cherished by all developers. In my experience when something is everyone's responsibility, eventually no one is responsible for it. I think the PMC should drive it because IMHO the PMC comprises of our project management folks who have decision making powers and are officially responsible for the project as recognized by the ASF [1]. Therefore, I'm requesting our PMC to come up with a convention along with committers/developers on this issue and enforce it using some tooling etc. [1] http://www.apache.org/dev/pmc.htm Regards, Rohit Yadav Software Architect, ShapeBlue M. +91 88 262 30892 | rohit.ya...@shapeblue.com Blog: bhaisaab.org | Twitter: @_bhaisaab Find out more about ShapeBlue and our range of CloudStack related services IaaS Cloud Design Buildhttp://shapeblue.com/iaas-cloud-design-and-build// CSForge – rapid IaaS deployment frameworkhttp://shapeblue.com/csforge/ CloudStack Consultinghttp://shapeblue.com/cloudstack-consultancy/ CloudStack Infrastructure Supporthttp://shapeblue.com/cloudstack-infrastructure-support/ CloudStack Bootcamp Training Courseshttp://shapeblue.com/cloudstack-training/ This email and any attachments to it may be confidential and are intended solely for the use of the individual to whom it is addressed. Any views or opinions expressed are solely those of the author and do not necessarily represent those of Shape Blue Ltd or related companies. If you are not the intended recipient of this email, you must neither take any action based upon its contents, nor copy or show it to anyone. Please contact the sender if you believe you have received this email in error. Shape Blue Ltd is a company incorporated in England Wales. ShapeBlue Services India LLP is a company incorporated in India and is operated under license from Shape Blue Ltd. Shape Blue Brasil Consultoria Ltda is a company incorporated in Brasil and is operated under license from Shape Blue Ltd. ShapeBlue is a registered trademark.
Re: [DISCUSS][PROPOSAL] git workflow
Let me try that again, this time with content! I've dropped private@, since this doesn't belong there. On Tue, Jul 8, 2014 at 3:30 PM, Rohit Yadav rohit.ya...@shapeblue.com wrote: Hi, Daan Hoogland wrote: I do not see why the PMC should drive defining the standard. This is something that should be carried and cherished by all developers. In my experience when something is everyone's responsibility, eventually no one is responsible for it. I think the PMC should drive it because IMHO the PMC comprises of our project management folks who have decision making powers and are officially responsible for the project as recognized by the ASF [1]. Therefore, I'm requesting our PMC to come up with a convention along with committers/developers on this issue and enforce it using some tooling etc. [1] http://www.apache.org/dev/pmc.htm Everyone here is part of the community, and everyone deserves a say in how this is done. If you're suggesting that PMC members should be involved in this discussion, agreed! But should should committers and contributors!
Re: [DISCUSS][PROPOSAL] git workflow
Hi Chip, Chip Childers wrote: Let me try that again, this time with content! I've dropped private@, since this doesn't belong there. On Tue, Jul 8, 2014 at 3:30 PM, Rohit Yadavrohit.ya...@shapeblue.com wrote: Hi, Daan Hoogland wrote: I do not see why the PMC should drive defining the standard. This is something that should be carried and cherished by all developers. In my experience when something is everyone's responsibility, eventually no one is responsible for it. I think the PMC should drive it because IMHO the PMC comprises of our project management folks who have decision making powers and are officially responsible for the project as recognized by the ASF [1]. Therefore, I'm requesting our PMC to come up with a convention along with committers/developers on this issue and enforce it using some tooling etc. [1] http://www.apache.org/dev/pmc.htm Everyone here is part of the community, and everyone deserves a say in how this is done. If you're suggesting that PMC members should be involved in this discussion, agreed! But should should committers and contributors! Thanks Chip -- I'm with you on this. I'm trying to say is -- shared responsibility is tricky, in most cases no one would be responsible eventually, *unless*... Regards, Rohit Yadav Software Architect, ShapeBlue M. +91 88 262 30892 | rohit.ya...@shapeblue.com Blog: bhaisaab.org | Twitter: @_bhaisaab Find out more about ShapeBlue and our range of CloudStack related services IaaS Cloud Design Buildhttp://shapeblue.com/iaas-cloud-design-and-build// CSForge – rapid IaaS deployment frameworkhttp://shapeblue.com/csforge/ CloudStack Consultinghttp://shapeblue.com/cloudstack-consultancy/ CloudStack Infrastructure Supporthttp://shapeblue.com/cloudstack-infrastructure-support/ CloudStack Bootcamp Training Courseshttp://shapeblue.com/cloudstack-training/ This email and any attachments to it may be confidential and are intended solely for the use of the individual to whom it is addressed. Any views or opinions expressed are solely those of the author and do not necessarily represent those of Shape Blue Ltd or related companies. If you are not the intended recipient of this email, you must neither take any action based upon its contents, nor copy or show it to anyone. Please contact the sender if you believe you have received this email in error. Shape Blue Ltd is a company incorporated in England Wales. ShapeBlue Services India LLP is a company incorporated in India and is operated under license from Shape Blue Ltd. Shape Blue Brasil Consultoria Ltda is a company incorporated in Brasil and is operated under license from Shape Blue Ltd. ShapeBlue is a registered trademark.
Re: [DISCUSS][PROPOSAL] git workflow
On Jul 8, 2014, at 4:13 PM, Rohit Yadav rohit.ya...@shapeblue.com wrote: Hi Chip, Chip Childers wrote: Let me try that again, this time with content! I've dropped private@, since this doesn't belong there. On Tue, Jul 8, 2014 at 3:30 PM, Rohit Yadavrohit.ya...@shapeblue.com wrote: Hi, Daan Hoogland wrote: I do not see why the PMC should drive defining the standard. This is something that should be carried and cherished by all developers. In my experience when something is everyone's responsibility, eventually no one is responsible for it. I think the PMC should drive it because IMHO the PMC comprises of our project management folks who have decision making powers and are officially responsible for the project as recognized by the ASF [1]. Therefore, I'm requesting our PMC to come up with a convention along with committers/developers on this issue and enforce it using some tooling etc. [1] http://www.apache.org/dev/pmc.htm Everyone here is part of the community, and everyone deserves a say in how this is done. If you're suggesting that PMC members should be involved in this discussion, agreed! But should should committers and contributors! Thanks Chip -- I'm with you on this. I'm trying to say is -- shared responsibility is tricky, in most cases no one would be responsible eventually, *unless*… That's really a bar discussion :). At Apache we govern by consensus. Any technical decisions (especially one like this), needs to be agreed upon by the community as a whole. The agreement will happen through discussion on the dev list. For us to change, we need people (who believe that what we are doing currently is wrong) to step up, explain the issues and make a proposal. Then by iterating and discussing the proposal we will reach consensus. At least that's how I view things. I re-opened the thread because no-one picked it up, and as you say it's a shame. IMHO our development methodology is totally broken and this is best shown by our inability to release on-time. I am interested to take on the 4.5 or 4.6 RM duties if we agree to change our workflow significantly. Personally, I would like to freeze master and make the development happen somewhere else. Basically master should be our releasable branch and once we merge things in master we end up with working releases. I would go further and actually propose that only the RM gets to merge in master. I think if we started from a working release tag it would mean that we would never miss a release on time. Only the scope of the features would be affected. Until we have a proper review/test/commit CI setup we should not allow committing to master. I am still thinking through this, but once I have a clear idea, I plan to make a proposal by writing a new workflow on the wiki. ideas, thoughts, flames ? -sebastien Regards, Rohit Yadav Software Architect, ShapeBlue M. +91 88 262 30892 | rohit.ya...@shapeblue.com Blog: bhaisaab.org | Twitter: @_bhaisaab Find out more about ShapeBlue and our range of CloudStack related services IaaS Cloud Design Buildhttp://shapeblue.com/iaas-cloud-design-and-build// CSForge – rapid IaaS deployment frameworkhttp://shapeblue.com/csforge/ CloudStack Consultinghttp://shapeblue.com/cloudstack-consultancy/ CloudStack Infrastructure Supporthttp://shapeblue.com/cloudstack-infrastructure-support/ CloudStack Bootcamp Training Courseshttp://shapeblue.com/cloudstack-training/ This email and any attachments to it may be confidential and are intended solely for the use of the individual to whom it is addressed. Any views or opinions expressed are solely those of the author and do not necessarily represent those of Shape Blue Ltd or related companies. If you are not the intended recipient of this email, you must neither take any action based upon its contents, nor copy or show it to anyone. Please contact the sender if you believe you have received this email in error. Shape Blue Ltd is a company incorporated in England Wales. ShapeBlue Services India LLP is a company incorporated in India and is operated under license from Shape Blue Ltd. Shape Blue Brasil Consultoria Ltda is a company incorporated in Brasil and is operated under license from Shape Blue Ltd. ShapeBlue is a registered trademark.
Re: [DISCUSS][PROPOSAL] git workflow
On Jul 8, 2014, at 2:20 PM, Nate Gordon nate.gor...@appcore.com wrote: As someone who has worked with a number of different version control systems (and have far more love for git than any other), I'm curious as to why we would want to fight what I've always seen as the core feature of git. Branching and merging. The gitflow model is incredibly useful for keeping track of a number of different development paths concurrently. Branches remained organized and have a clear destination and workflow that they need to go through as part of the merging process. We use it internally (on a much smaller team) with great success. And with the difficulties I've seen on the mailing list around the -forward branches and cherry-picking,I'm curious as to why this is the preferred method. I don't think it's the preferred method. I see it as 'the method currently used'. I think we need to change. From everything I've read about git and cherry-picking, it is a copy of the commit, not a reference to the original commit. This makes it hard to track down an individual change to find the original source. Thanks, -Nate On Tue, Jul 8, 2014 at 11:04 AM, Mike Tutkowski mike.tutkow...@solidfire.com wrote: Thanks for bringing this up again, Sebastien. I've had http://nvie.com/posts/a-successful-git-branching-model/ up in Chrome since you sent that link and been reading through it a bit here and there, but have just been too busy as of late to give it a bunch of thought. I agree, though, that we should really think about moving to another model of using Git as it is not un-common for master to be broken, which leads to a lot of lost development time for many people. On Mon, Jun 30, 2014 at 4:09 PM, 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
Re: [DISCUSS][PROPOSAL] git workflow
On Jul 8, 2014, at 5:40 PM, Sebastien Goasguen run...@gmail.com wrote: On Jul 8, 2014, at 4:13 PM, Rohit Yadav rohit.ya...@shapeblue.com wrote: Hi Chip, Chip Childers wrote: Let me try that again, this time with content! I've dropped private@, since this doesn't belong there. On Tue, Jul 8, 2014 at 3:30 PM, Rohit Yadavrohit.ya...@shapeblue.com wrote: Hi, Daan Hoogland wrote: I do not see why the PMC should drive defining the standard. This is something that should be carried and cherished by all developers. In my experience when something is everyone's responsibility, eventually no one is responsible for it. I think the PMC should drive it because IMHO the PMC comprises of our project management folks who have decision making powers and are officially responsible for the project as recognized by the ASF [1]. Therefore, I'm requesting our PMC to come up with a convention along with committers/developers on this issue and enforce it using some tooling etc. [1] http://www.apache.org/dev/pmc.htm Everyone here is part of the community, and everyone deserves a say in how this is done. If you're suggesting that PMC members should be involved in this discussion, agreed! But should should committers and contributors! Thanks Chip -- I'm with you on this. I'm trying to say is -- shared responsibility is tricky, in most cases no one would be responsible eventually, *unless*… That's really a bar discussion :). At Apache we govern by consensus. Any technical decisions (especially one like this), needs to be agreed upon by the community as a whole. The agreement will happen through discussion on the dev list. For us to change, we need people (who believe that what we are doing currently is wrong) to step up, explain the issues and make a proposal. Then by iterating and discussing the proposal we will reach consensus. At least that's how I view things. I re-opened the thread because no-one picked it up, and as you say it's a shame. IMHO our development methodology is totally broken and this is best shown by our inability to release on-time. I am interested to take on the 4.5 or 4.6 RM duties if we agree to change our workflow significantly. Personally, I would like to freeze master and make the development happen somewhere else. Basically master should be our releasable branch and once we merge things in master we end up with working releases. I would go further and actually propose that only the RM gets to merge in master. I think if we started from a working release tag it would mean that we would never miss a release on time. Only the scope of the features would be affected. Until we have a proper review/test/commit CI setup we should not allow committing to master. I am still thinking through this, but once I have a clear idea, I plan to make a proposal by writing a new workflow on the wiki. ideas, thoughts, flames ? -sebastien This is also a good read, against cherry-picking (back to Rajani's original point): http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html (even wondering if Rohit did not send this to the list already…) -sebastien Regards, Rohit Yadav Software Architect, ShapeBlue M. +91 88 262 30892 | rohit.ya...@shapeblue.com Blog: bhaisaab.org | Twitter: @_bhaisaab Find out more about ShapeBlue and our range of CloudStack related services IaaS Cloud Design Buildhttp://shapeblue.com/iaas-cloud-design-and-build// CSForge – rapid IaaS deployment frameworkhttp://shapeblue.com/csforge/ CloudStack Consultinghttp://shapeblue.com/cloudstack-consultancy/ CloudStack Infrastructure Supporthttp://shapeblue.com/cloudstack-infrastructure-support/ CloudStack Bootcamp Training Courseshttp://shapeblue.com/cloudstack-training/ This email and any attachments to it may be confidential and are intended solely for the use of the individual to whom it is addressed. Any views or opinions expressed are solely those of the author and do not necessarily represent those of Shape Blue Ltd or related companies. If you are not the intended recipient of this email, you must neither take any action based upon its contents, nor copy or show it to anyone. Please contact the sender if you believe you have received this email in error. Shape Blue Ltd is a company incorporated in England Wales. ShapeBlue Services India LLP is a company incorporated in India and is operated under license from Shape Blue Ltd. Shape Blue Brasil Consultoria Ltda is a company incorporated in Brasil and is operated under license from Shape Blue Ltd. ShapeBlue is a registered trademark.
Re: [DISCUSS][PROPOSAL] git workflow
In my first email, I mentioned a youtube url[1] which is a google tech talk by Laura Wingerd [2] of Perforce Software I recommend watching it as well. (its a 55 min video). [1] https://www.youtube.com/watch?v=AJ-CpGsCpM0 [2] http://www.perforce.com/blog/author/lwingerd ~Rajani On 09-Jul-2014, at 3:52 am, Sebastien Goasguen run...@gmail.commailto:run...@gmail.com wrote: This is also a good read, against cherry-picking (back to Rajani's original point): http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html (even wondering if Rohit did not send this to the list already…) -sebastien
Re: [DISCUSS][PROPOSAL] git workflow
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
Re: [DISCUSS][PROPOSAL] git workflow
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
Re: [DISCUSS][PROPOSAL] git workflow
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
Re: [DISCUSS][PROPOSAL] git workflow
On Mon, Jun 2, 2014 at 1:21 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? The historical reasoning was that we needed to keep 4.x relatively clean, particularly as we were voting on RCs, but we didn't want to stop folks working on bugs, even if they were minor and getting those ready for 4.x.1; otherwise 4.x effectively becomes abandoned from a bug fix perspective. What should (IMO) be happening is 4.x-forward should be getting merged into 4.x as soon as the release is kicked out the door, and then 4.x-forward deleted. --David
Re: [DISCUSS][PROPOSAL] git workflow
Is that not happening? On Mon, Jun 2, 2014 at 11:26 AM, David Nalley da...@gnsa.us wrote: On Mon, Jun 2, 2014 at 1:21 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? The historical reasoning was that we needed to keep 4.x relatively clean, particularly as we were voting on RCs, but we didn't want to stop folks working on bugs, even if they were minor and getting those ready for 4.x.1; otherwise 4.x effectively becomes abandoned from a bug fix perspective. What should (IMO) be happening is 4.x-forward should be getting merged into 4.x as soon as the release is kicked out the door, and then 4.x-forward deleted. --David
Re: [DISCUSS][PROPOSAL] git workflow
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