Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Message from discussion Branching best practice advice for an inherently complex environment

Received: by 10.68.244.73 with SMTP id xe9mr3396589pbc.1.1348578569851;
        Tue, 25 Sep 2012 06:09:29 -0700 (PDT)
X-BeenThere: subversion_users@googlegroups.com
Received: by 10.68.237.161 with SMTP id vd1ls525387pbc.3.gmail; Tue, 25 Sep
 2012 06:09:29 -0700 (PDT)
Received: by 10.66.88.168 with SMTP id bh8mr2886417pab.10.1348578569809;
        Tue, 25 Sep 2012 06:09:29 -0700 (PDT)
Received: by 10.66.88.168 with SMTP id bh8mr2886416pab.10.1348578569797;
        Tue, 25 Sep 2012 06:09:29 -0700 (PDT)
Return-Path: <users-return-16305-subversion_users+garchive-53313=googlegroups....@subversion.apache.org>
Received: from mail.apache.org (hermes.apache.org. [140.211.11.3])
        by gmr-mx.google.com with SMTP id g4si56181paw.1.2012.09.25.06.09.29;
        Tue, 25 Sep 2012 06:09:29 -0700 (PDT)
Received-SPF: pass (google.com: domain of users-return-16305-subversion_users+garchive-53313=googlegroups....@subversion.apache.org designates 140.211.11.3 as permitted sender) client-ip=140.211.11.3;
Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of users-return-16305-subversion_users+garchive-53313=googlegroups....@subversion.apache.org designates 140.211.11.3 as permitted sender) smtp.mail=users-return-16305-subversion_users+garchive-53313=googlegroups....@subversion.apache.org; dkim=pass header...@gmail.com
Received: (qmail 39292 invoked by uid 500); 25 Sep 2012 13:09:29 -0000
Mailing-List: contact users-h...@subversion.apache.org; run by ezmlm
Precedence: bulk
List-Help: <mailto:users-h...@subversion.apache.org>
List-Unsubscribe: <mailto:users-unsubscr...@subversion.apache.org>
List-Post: <mailto:us...@subversion.apache.org>
List-Id: <users.subversion.apache.org>
Delivered-To: mailing list us...@subversion.apache.org
Received: (qmail 39271 invoked by uid 99); 25 Sep 2012 13:09:28 -0000
Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136)
    by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 25 Sep 2012 13:09:28 +0000
X-ASF-Spam-Status: No, hits=-0.7 required=5.0
	tests=RCVD_IN_DNSWL_LOW,SPF_PASS
X-Spam-Check-By: apache.org
Received-SPF: pass (athena.apache.org: domain of lesmikes...@gmail.com designates 74.125.83.43 as permitted sender)
Received: from [74.125.83.43] (HELO mail-ee0-f43.google.com) (74.125.83.43)
    by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 25 Sep 2012 13:09:22 +0000
Received: by eekc13 with SMTP id c13so1998810eek.16
        for <us...@subversion.apache.org>; Tue, 25 Sep 2012 06:09:01 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20120113;
        h=mime-version:in-reply-to:references:date:message-id:subject:from:to
         :cc:content-type;
        bh=efEWpGwvafvRyEumR6KqZtyeWlpmfz7OruPaXfbni2M=;
        b=IMhj2mYCCOwvKrvjGxMXMdcH5wS4SMIqb30dCAlWYp23xv6+Xd19U1UsU6jCUPi7o1
         7PZU9KRXNaxwZUZ2MM8fekkv7GubCJMT3BxY81vezTh3KwyoPr8lB0ui/AoK9CJ0MBdX
         hNalPglXPqDfVZjGL9nQVvs5nhs7xqSIK0QFsazVqVMMNFp3z/Edf/rpQyvlBVWwv+7N
         95s66IVMIbu98DPydR0rnvehg90I2kddl4O+TQ44CZL87behE5kVN9sHExa8JCZD82Z6
         3JOb8NMMDV9oXOaOZ5i/PcsrLpW/UVnpgN7RqMJ8lJtQBREGHXUq9PN137Fa1QA3ocJm
         NZdw==
MIME-Version: 1.0
Received: by 10.14.203.73 with SMTP id e49mr19804734eeo.27.1348578540918; Tue,
 25 Sep 2012 06:09:00 -0700 (PDT)
Received: by 10.204.139.3 with HTTP; Tue, 25 Sep 2012 06:09:00 -0700 (PDT)
In-Reply-To: <E19D42CA-2F09-441E-856A-819C3859A...@gmail.com>
References: <E19D42CA-2F09-441E-856A-819C3859A...@gmail.com>
Date: Tue, 25 Sep 2012 08:09:00 -0500
Message-ID: <CAOAgVpz46cif0ExUFGrcis4DeBbuYxEziK56CmXu9BDHv5T...@mail.gmail.com>
Subject: Re: Branching best practice advice for an inherently complex environment
From: Les Mikesell <lesmikes...@gmail.com>
To: Phil Pinkerton <pcpinker...@gmail.com>
Cc: "us...@subversion.apache.org" <us...@subversion.apache.org>
Content-Type: text/plain; charset=ISO-8859-1
X-Virus-Checked: Checked by ClamAV on apache.org

On Tue, Sep 25, 2012 at 6:39 AM, Phil Pinkerton <pcpinker...@gmail.com> wrote:
> Looking for convincing guidelines to change some rather poor practices
>
> Scenario : Project has multiple branches with frequent changes by several different developers, merging back to trunk is infrequent and when done merge results in 90% conflicts.
>
> simple example:  Project A1 (trunk)  copied to branches B1,
>
> B1 gets a few changes and is copied to B2,
>
> B2 gets some changes and  B2 is merged to trunk,
>
> trunk gets copied to B3, B1 is  merged to B3 and copied to B4
>
> B2 gets more changes, B2 is merged to B4, B4 gets more changes, B1 gets more changes.
>
> messy I know ;  the big mess is B1  needs to be tagged and built and released but of course the merge to trunk will be full of conflicts,
> meanwhile B3 has more changes as does B4 and B4 needs to merge to B2 so B2 can be tagged built and released.

What's the goal here?  That is, is there some reason for maintaining a
bunch of slightly differing versions or is the intent for the
developers to work together and take advantage of each other's work?
If it is the latter, it would be better to just commit to the trunk
and resolve conflicts as they happen.  In any case, you probably want
to merge the changes you want to keep to the trunk and make the trunk
the parent of the next branch instead of getting generations apart.
It is also very easy and productive to add a continuous integration
build server like Jenkins to automatically run builds and tests to
make sure that commits don't break anything.

> More branches are expected, changes and lack of frequent sequential merges is out of control, releases are scheduled monthly.

Branches make sense ahead of releases since that is one place where
you may need to maintain differences as the trunk continues.  But in
that case you often won't do a full merge later, just any needed
bugfixes, then tag the release from there.

> My thoughts are this will get worse before it gets better, any experienced users who have complex environments have an idea on how to turn this around to use best practices ?
>
> What is a good example for controlling massive changes in multiple branches, merges to trunk and maximizing tags?

If you haven't done it already, one thing that can help is to separate
out any components that can possibly be treated as libraries into
their own project-level trees with a separate branch/tag structure
that the application(s) can access with svn external references.
This lets you stabilize the interfaces at tagged versions so the
applications aren't affected by subsequent changes in the libraries
until the next tag is released and the application changes its
external reference to use it.  This will help with the scenario where
you really do want differing versions to be maintained simultaneously
and can isolate the developers working on different parts from each
other to a certain extent.

> Have RTFM'd but need to convince the powers that be a change is needed that will also handle frequent changes in a very dynamic development environment.
>
> I am still trying to fully understand this environment and attempt to turn it around as quickly as possible.
>
> Any examples and or suggestions to produce a convincing argument would be useful.

Good testing procedures are what make good software, so whatever you
use should be wrapped around your QA and release testing process to
make sure that the versions released are exactly what have passed
testing.   (Typically trunk->release-branch->release-tag)
Individually tagged components may help with this if they can be
tested separately since portions of the code may not change between
releases even though there is work in progress on the component
trunks.

-- 
   Les Mikesell
     lesmikes...@gmail.com