You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@subversion.apache.org by Campbell,
Matthew A <Ma...@Relizon.com> on 2004/07/30 16:07:38 UTC
Comparing notes on branch-per-task methodology
We're adopting a branch-for-every-task methodology here at the office and I know
there's some others on this list who work in a similar setup. Now that I'm
feeling really comforable with my unserstanding of the underlying SVN
technology, I was hoping to compare notes with regards to a few points on the
actual day-to-day *use* of the thing, in this particular model.
1) Do you use the trunk/ == production (stable) model? This is the way we're
working it and it seems to me to be a good idea, but I also realize that it's
not-quite-totally the conceptual inverse of the Subversion team's own model
(which is also, I believe, a classic open-source repopsitory model as well).
Are there any pitfalls to this approach? (Conceptual, implementational,
habitual, or otherwise?)
2) When a task on a branch is completed, do you always attempt a merge with the
trunk, or do you compare revision numbers first? Our idea here is to compare
the current revision number of the trunk with the revision number from which the
branch was created (stored in a property). If ( current_trunk_rev >
branch_start_rev ) we flag the merge case and attempt a merge from trunk, revs
branch_start_rev:current_trunk_rev into the branch. If not, then we "svn rm"
the trunk and "svn cp" the branch back "on top of" the trunk.
3) Addendum to the last point... after a branch/task goes back to production
(trunk), do you delete the branch? There's really no reason to keep it there -
it's not like the data goes away anyway - and the old branches would now just be
excess clutter. Plus, as long as the commit logs on the trunk are thorough -
like "moving branch for fooapp, task 1234 into production" - you can always drop
to (commit_log_revision - 1) in branches/ and the branch for fooapp_1234/ should
be right there.
Thanks in advance for all replies...
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@subversion.tigris.org
For additional commands, e-mail: users-help@subversion.tigris.org
Re: Comparing notes on branch-per-task methodology
Posted by Branko Čibej <br...@xbc.nu>.
Matthew Campbell wrote:
>We're adopting a branch-for-every-task methodology here at the office and I know
>there's some others on this list who work in a similar setup. Now that I'm
>feeling really comforable with my unserstanding of the underlying SVN
>technology, I was hoping to compare notes with regards to a few points on the
>actual day-to-day *use* of the thing, in this particular model.
>
>
I don't actually use this model, at least not lately (and not with
Subversion), but I do have a few comments (and I'll try to avoid
speaking my mind about the branch-per-task pattern itself. :-)
>1) Do you use the trunk/ == production (stable) model? This is the way we're
>working it and it seems to me to be a good idea, but I also realize that it's
>not-quite-totally the conceptual inverse of the Subversion team's own model
>(which is also, I believe, a classic open-source repopsitory model as well).
>Are there any pitfalls to this approach? (Conceptual, implementational,
>habitual, or otherwise?)
>
>
I think this is quite conformant to the branch-per-task pattern. The
fact that the Subversion project uses (and recommends) a different
pattern does not mean that SVN is in any way optimised for it. The only
potential drawback of branch-per-task with Subversion that I can see is
a consequence of an ommission in SVN, namely, that we don't store merge
history. This causes a bit more administrative overhead for tracking the
merges, which I see you've noticed. (And will be fixed in the future.)
>2) When a task on a branch is completed, do you always attempt a merge with the
>trunk, or do you compare revision numbers first? Our idea here is to compare
>the current revision number of the trunk with the revision number from which the
>branch was created (stored in a property). If ( current_trunk_rev >
>branch_start_rev ) we flag the merge case and attempt a merge from trunk, revs
>branch_start_rev:current_trunk_rev into the branch. If not, then we "svn rm"
>the trunk and "svn cp" the branch back "on top of" the trunk.
>
>
This removing of trunk strikes me as wrong from a conceptual point of
view. You're effectively branching your stable branch off your task
branch, which is exactly the opposite of what branch-per-task is all
about. If Subversion did merge bookkeeping, this would complicate it
quite a bit. :-)
In practical terms, I don't think you gain anything by doing that (you
don't save any space in the repository, for example), and your merge
process (and bookkeeping!) become more complicated.
>3) Addendum to the last point... after a branch/task goes back to production
>(trunk), do you delete the branch? There's really no reason to keep it there -
>it's not like the data goes away anyway - and the old branches would now just be
>excess clutter. Plus, as long as the commit logs on the trunk are thorough -
>like "moving branch for fooapp, task 1234 into production" - you can always drop
>to (commit_log_revision - 1) in branches/ and the branch for fooapp_1234/ should
>be right there.
>
>
Exactly. I'd recommend removing obsolete branches myself. There's not a
single reason for keeping them around, and you can always resurrect them
if necessary.
-- Brane
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@subversion.tigris.org
For additional commands, e-mail: users-help@subversion.tigris.org