Another branching lesson

In the migration from Tiger to Leopard I learnt another, painfully obvious lesson about branching and merging.

Even though SVK cures the pain of trying to do merging with Subversion, there will always be some types of branch for which automated merging is not going to be possible. The move from Tiger to Leopard is one such situation because it doesn’t just involve updates to API but a change to the language as well (to Objective-C 2.0).

This means that the two branches very quickly diverge because the language changes are pervasive. So when you make a change on one branch and try to merge it back into another you find that it’s not just a case of adding or removing lines, but of having translate them at the same time. It’s kind of like trying to automatically merge changes between the Ruby and Python ports of a project; you can "merge" but you have to rewrite along the way so you may as well just do it manually.

In my case I don’t intend to keep the two branches in lock-step with each other so cherry picking will be fine. In hindsight, though, I see that I branched too soon and so I’m now having to redo a lot of previously done work.