Hi,
I'd like to ask, is there any reason for developing in develop branch? I'm not sure what the right git work flow is, but Kamil was wondering why we do this. My experience is that I tried master firstly and I came to develop after Tim told me about it. Wouldn't be better to develop in master branch?
Thank you Petr Schindler
On Wed, 27 Feb 2013 18:58:02 +0100 Petr Schindler pschindl@redhat.com wrote:
Hi,
I'd like to ask, is there any reason for developing in develop branch? I'm not sure what the right git work flow is, but Kamil was wondering why we do this. My experience is that I tried master firstly and I came to develop after Tim told me about it. Wouldn't be better to develop in master branch?
I think that it depends on the git branching philosophy used and that's a project-by-project decision. As long as everyone is on the same page, I don't think it really matters where development occurs.
Some of this started when it was just Amit and I working on it and it looks like not everything made it into the docs or on the list - sorry about that.
On the topic of branching strategies, one of the things that we're doing with the blocker tracking app is following the 'git flow' branching strategy [1]. AFAIK, several of the fedora infra apps have started using the same branch strategy.
[1] http://nvie.com/posts/a-successful-git-branching-model/
The advantage is that changes are isolated and clearly marked - you don't have to send diffs around, you don't have to worry about when or where to push changes and it's easy to figure out where to build the release from. Code related to a specific feature, release or hotfix is easy to find.
I think it's working well for the blocker tracking app now that we have a branch naming convention set (feature/tXXX-briefdescription - one feature branch ignores this but it was created before the convention was set) but Martin might be a good reference there since he's the other person dealing with the process there :)
Any objections to using the same process for fedora-build-service?
Tim
BTW, I did start using git flow on fedora-build-service without sending an email out. This was an attempt to triage an issue that I'm seeing with cgit and reviewboard that is still ongoing - if there is objection to using git flow, I can back everything out.
On 02/27/2013 02:58 PM, Petr Schindler wrote:
Hi,
I'd like to ask, is there any reason for developing in develop branch? I'm not sure what the right git work flow is, but Kamil was wondering why we do this. My experience is that I tried master firstly and I came to develop after Tim told me about it. Wouldn't be better to develop in master branch?
Develop in the master branch means the mentioned branch will frequently be broken, and that is, to put mildly, very annoying. A branch model where there's a master, and a next branch where the development happens, and when next passes the regression testing master is merged with next turns out much better and less frustrating for users that won't develop your software, but actually use it.
The model above is not perfect, that is, breakages can still reach master, but it's much harder with regression testing (functional + unittests) in place.
Develop in the master branch means the mentioned branch will frequently be broken, and that is, to put mildly, very annoying. A branch model where there's a master, and a next branch where the development happens, and when next passes the regression testing master is merged with next turns out much better and less frustrating for users that won't develop your software, but actually use it.
We have git tags for these users, so if the latest commit is broken, they can always check out "release-X.Y" tag and compile that.
I think that both approaches are quite equivalent technically, but I consider the standard approach more transparent.
In the "git flow" approach that you linked [1]: * Users who want to use stable software can compile latest 'master' commit * Users who want to use latest development software can compile latest 'develop' commit * Release branches are used for stabilization * Master branch is used for releases and hotfixes * To move to a latest stable release you just fast-forward the 'master' branch
In the workflow we use in AutoQA git: * Users who want to use stable software can compile latest 'release-X.Y' tag * Users who want to use latest development software can compile latest 'master' commit * Release branches are used for stabilization, releases and hotfixes * To move to a latest stable release you have to list 'release-X.Y' tags and switch to the latest one
So basically the "git flow" model just replaces the usage of git tags with having fast-forwardable 'master' branch. It adds some additional branches instead. It adds a bit of complexity, but what I don't like most is that it obscures the development branch. Using 'master' for development is _the standard_ for most OSS projects. This is the branch where people expect the latest code and against which they will send you patches. Renaming it to 'develop' is just a workaround that creates different problems. A better approach could be to create a 'stable' branch and use 'master' as usual, if you don't really want to rely on git tags.
Just my two cents. I don't propose to change your work-flow in FBS or other projects. Only my personal preference is different.
Hi Petr,
----- Original Message -----
From: "Petr Schindler" pschindl@redhat.com To: autoqa-devel@lists.fedorahosted.org Cc: "Amit Saha" asaha@redhat.com Sent: Thursday, February 28, 2013 3:58:02 AM Subject: [Fedora Build Service] Why we are developing in develop branch?
Hi,
I'd like to ask, is there any reason for developing in develop branch? I'm not sure what the right git work flow is, but Kamil was wondering why we do this. My experience is that I tried master firstly and I came to develop after Tim told me about it. Wouldn't be better to develop in master branch?
This is of course project specific. When I started the cleaning up of the project on fedora hosted, I was using the develop branch for the "cleaned up" code, or what would form the the base for the future releases.
The master however was just a copy of the old code (from GitHub) where it was originally started. Thus, it was a "legacy" if you wish. My idea was that, over time, as things mature, we would remove the master's existing contents and move the bits from develop to master for every release. Yes, of course you could also have release specific branches, which you first merge from develop and then you merge the release branches into master. So, develop -> release-x.x -> master is what I mean.
Hope it makes things clearer.
Best, Amit.
autoqa-devel@lists.fedorahosted.org