I appreciate your zealot for a different workflow. However, I've found a 
substantial improvement in productivity and tracking by adopting the workflow 
we use now over the workflow you suggest - we did start with an almost 
identical workflow. Granted, the small commercial and open source environment 
(most users of Subversion?) is very different from our work environment 
(aerospace - we're not one of the big 3). However, I don't wish to pollute the 
mailing list with pedantic squabbles over which is 'better' and will leave it 
at this: our needs are just different.

For those that have run into this same problem: it took me most of the day to 
realize the small (but important!) mistake that I had made: 'svn merge' is not 
the way to create a branch, 'svn copy' is the way to create a branch.

C:\TestProject\branches\software1\issue34>svn MERGE 
https://localhost/svn/TestProject/branches/integration/relea...@head .
should have been:
C:\TestProject\branches\software1\issue34>svn COPY 
https://localhost/svn/TestProject/branches/integration/relea...@head .


Once I switched to using 'svn copy' for branch creation, our workflow works 
just fine in Subversion 1.6 and this product appears to meet our needs. This 
revision graph shows a that a branch-heavy works just fine:
http://img801.imageshack.us/i/65330015.jpg

Thanks,
Brian

Date: Fri, 17 Dec 2010 13:39:01 -0500
Subject: Re: branch creation - merge not working?
From: qazw...@gmail.com
To: linda...@hotmail.com
CC: users@subversion.apache.org

Wow! Were you once a ClearCase user? This is exactly how ClearCase or a 
distributed version control system would work.
Subversion merges are problematic. In fact, I know many sites that simply 
refuse to merge stuff. Instead, they just manually apply the changes. You have 
to know when to use and not to use the --reintergrate parameter.

That said, when you merge from branch "A" to branch "B" and then merge branch 
"B" to Branch "C", new files are not always created because of the way 
Subversion tracks changes. What you need to do is merge Branch "A" to branch 
"B" and then merge Branch "A" to branch "C".

What you might want to understand is how Subversion's branching scheme was 
designed to work. Subversion is built to borrow the CVS workflow. It works 
somewhat like this:
* All users work on a single branch. In many sites, this is "trunk".

* When you are nearing release time, many sites will branch from "trunk" to a 
"release branch". This way, one group of users can continue working on new 
features of your project on trunk while another group of users can work on 
getting the branch ready for release. If there is merging, it is usually bug 
fixes that were discovered on the branch, implemented in the trunk, then merged 
to the release branch. Subversion handles this type of merging with aplomb. You 
can merge your changes the other way, but you'll need to use that --reintegrate 
command line switch. 

* When the software is released, the tagging is done, the release branch (not 
the trunk) is copied to the tags directory.
The reason I said it sounds like your a ClearCase user is that you describe 
more or less the way it is done via ClearCase UCM and how most sites implement 
base ClearCase. I've joked that ClearCase combines all the problems of a 
distributed version control system (developers working in their merry ol' world 
with lots of patching/merging going on), and all the disadvantages of a 
centralized version control system (heavy network traffic, single point of 
failure of the repository, etc.).

For example, why do you merge everything back to trunk? It contains nothing. No 
one does any work on it. What does trunk represent to you? The latest release? 
That's what the tags directory is for. But, I've seen so many sites do the same 
thing. The answer they give is always the same: "This way trunk only has 
released code on it." But, no one can explain to me how is this important.

I blame PowerPoint. Someone comes up with some goofy branching scheme because 
it looks good in PowerPoint, and then realizes that trunk isn't doing anything. 
So, they draw one arrow back from the branch to trunk. All the arrows line up 
nice and neat and all the little boxes are in order.

I was trained as a CM on ClearCase, and I bought the idea of development and 
integration branches because that's how it is suppose to be done! Sure, I spent 
a ton of time running around and pestering developers to merge their work back 
into the "integration branch", and we always had big merge conflicts and 
someone always delivers a few gigabytes of changes in the last minute, but 
that's how development is suppose to work. Right?

When I started working for a shop with about 4 dozen developers spread out all 
over the world using CVS, I was shocked. There's no way this would work. 
Everyone using trunk? What about developer branches? How can a developer make 
changes if other developers are changing trunk all the time?

When I saw how the whole process worked, I was in an immediate funk because I 
suddenly realized that this group really didn't need me running around any more 
and pestering them. What is a CM suppose to do besides be a pain in the butt?

It took me a while to learn that if I'm not spending 8 hours each day pestering 
developers and trying to fix broken merges, I can do all the other CM things I 
never had time to do. Since then, I've been an advocate of the Benign Neglect 
school of CM management: Do things the easy way. The simpler the better. Why 
branch? Be happy!

-- 
David Weintraub
qazw...@gmail.com

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



                                          

Reply via email to