Martin Fowler 3 September 2009 version control · continuous integration tags:
What customers says... "I've had a chance to play with "method history" for a few days now and I'm impressed so far" Jason Allis, ThoughtWorks "I started using the product on a project already and I√≠m amazed at how smooth branching and merging is, home run, finally branching like a developer expects it to work." Wayne R.
Update: I have used the term ‘branch-per-feature’ very loosely until recently. It was a catchy name, easy to remember, and got the point across.
Someone once asked me if adoption of Agile methods results in changing your branching strategy. After several milliseconds of thought (and a dramatic pause for effect), I said, "No, not really." Agile methodologies are all about process, and branching strategies are intimately tied to the development process. It's reasonable to expect that adoption of agile methods results in changes to your branching strategy. And indeed it does if you aren't already following branching best practices. When it comes to applying agile concepts to branching strategies, I find that it doesn't lead to new branching patterns.
The goals of a branching pattern should always to be to manage a software team’s development process and to make this process as easy and straight-forward as possible. With this process, the team should be able to complete all of the things that need to happen in order to release a piece of software. So how you establish this pattern? Make Merging Changes Easy and Straight-forward
Today I watched a subversion webinar where the presenter from a popular hosting/services company described three general branching strategies: unstable trunk , stable trunk , and agile . After seeing their "solution" for managing agile development with branches, I thought "I agree with the goal but what a complete merge mess using branches! Streams are significantly more natural and just plain easier."
Naresh Jain » Agile FAQs Blog » Managed Chaos » Version Control Branching (extensively) Considered HarmfulBranching is a powerful tool in managing development and releases using a version control system. A branch produces a split in the code stream. One recurring debate over the years is what goes on the trunk (main baseline) and what goes on the branch. How do you decide what work will happen on the trunk, and what will happen on the branch? Here is my rule:
The TFS branching guide is a very detailed run through of the various situations and scenarios under which branching can be performed and the different strategies that exist, however because the guide covers so many scenarios it’s difficult for some people to know what approach they should follow, and when they look at some of the advanced diagrams they freak out at the complexity. For this post I’m going to keep it simple and just show one approach, the one that I feel is best for agile teams implementing using user stories. It’s effectively the feature branch approach, and I’ve been tempted not to write this post, however I find that that feature-branch approach can be a little confusing for some people.
Source control management has always been one of those sticky topics which always causes many questions. Many veteran programmers are baffled by the in-and-outs of branching and merging. And for good reason; it is a difficult topic. I’ve been around in many different organizations. I’ve been the person who was told what the SCM strategy was, and I have been the person who designed it.
I've been using git for source code management for over a year now and I'm totally hooked. I won't rave about all the usual reasons WhyGitIsBetterThanX since it's been done already. Instead, I'm going to share how I use git for easy agile development.
Font: Mechanical pencil for body, Erwin for heading Sources: Tim Ottinger, George Dinwiddie (via mail list) , Jeff Langr Branch-per-feature is a common SCM strategy in which a branch is created on a central server for each feature that is under development. As a feature is completed, the branch is integrated back into the main development code line. In some organizations, releases are composed by merging selected, completed features together. This seems quite rational, and can be made to work with enough effort applied in bursts.
Software Testing & QA Online Community > Detail: Agile Codeline Management Software configuration management (SCM) techniques have a reputation as something to tolerate as a necessary evil, in spite of the fact that they appear to make development more complicated. With time, developers see the benefit of version control, but often they have the impression that SCM is "important" in some not understood way. The fear is particularly acute when it comes to codeline management, especially when the word "branch" is mentioned. In this article I will explain the concept of Agile Software Configuration Management, and give an example of how one of the more feared codeline management concepts; the branch, can be understood as a tool for agility. This is one example of why version management is part of the software developer’s toolkit, even the agile developer’s toolkit.
One trend I've noticed with git users is a habit to create a lot of branch and merge activity. The oft-repeated mantra is "branching is (easy/cheap/safe) in git so I do it a lot". When working on an agile project though, this behavior can cause serious problems. To illustrate the point, compare american football to soccer: American football has highly specialized players and positions as well as a variety of tightly choreographed set pieces. In contrast, soccer has a much lesser degree of specialization, and while there are some set pieces that are choreographed, the majority of the game is spent reacting to the situation as it evolves.