|  | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" | 
|  | "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | 
|  | <html xmlns="http://www.w3.org/1999/xhtml"> | 
|  | <head> | 
|  | <style type="text/css"> /* <![CDATA[ */ | 
|  | @import "../branding/css/tigris.css"; | 
|  | @import "../branding/css/inst.css"; | 
|  | /* ]]> */</style> | 
|  | <link rel="stylesheet" type="text/css" media="print" | 
|  | href="../branding/css/print.css"/> | 
|  | <script type="text/javascript" src="../branding/scripts/tigris.js"></script> | 
|  | <title>CollabNet Merge Tracking Summit</title> | 
|  | </head> | 
|  |  | 
|  | <body> | 
|  | <div class="h2"> | 
|  | <h2>CollabNet Merge Tracking Summit</h2> | 
|  |  | 
|  | <p>On Tuesday, January 17th, 2006, CollabNet held a merge tracking | 
|  | summit for some of their Subversion-using customers to solicit use | 
|  | cases and requirements for the enterprise.  The results are below; see | 
|  | also the pre-summit <a href="summit-survey.html">survey questionnaire | 
|  | and responses</a>.</p> | 
|  |  | 
|  | <p>(Note that this material is still being integrated with the rest of | 
|  | the stuff in the Subversion <a href="./">merge-tracking area</a>.)</p> | 
|  |  | 
|  | <div class="h3" id="results"> | 
|  | <h3>Summit Results</h3> | 
|  |  | 
|  | <!-- TODO: Incorporate feedback from rooneg, cmpilato, and djames. | 
|  | Better organize and flesh out content. --> | 
|  |  | 
|  | <div class="h4" id="summary"> | 
|  | <h4>Summary</h4> | 
|  |  | 
|  | <p>Enterprise users have branches which last longer than a typical | 
|  | open source project (e.g. more than a decade).  They tend to do merges | 
|  | more often, involving more files.  They may have dedicated staff and | 
|  | tool suites for performing merges and answering inquires about merges. | 
|  | Fundamentally, however, these are differences of scale, not kind. | 
|  | There were no real surprises in terms of functional requirements: it | 
|  | appears that enterprise users' needs are of the same nature as the | 
|  | needs of open source communities, individuals, and small- to | 
|  | medium-sized shops.  Enterprise users also have a greater need for | 
|  | auditability/traceability, largely due to compliance requirements | 
|  | (e.g. FDA, Sarbanes Oxley, etc.).  Based on the notes below and | 
|  | elsewhere in the <a href="./">merge-tracking area</a>, it does not | 
|  | appear that this would change what meta-data gets recorded, but it | 
|  | does imply more sophisticated data-mining and reporting features than | 
|  | the average user needs.</p> | 
|  |  | 
|  | </div>  <!-- summary --> | 
|  |  | 
|  | <div class="h4" id="details"> | 
|  | <h4>Details</h4> | 
|  |  | 
|  | <ul> | 
|  | <li><p>Even basic "merge memory" would be incredibly helpful in | 
|  | shops where minimal, inconsistent process prevails.  Users are often | 
|  | very average developers/maintenance programmers.</p></li> | 
|  |  | 
|  | <li><p>Very long-lived branches (e.g. 10+ years) containing very large | 
|  | binaries, tons of merges between them, and subject to duplicate bug | 
|  | reports should be handled.</p></li> | 
|  |  | 
|  | <li><p>The ability to manually adjust any merge meta data is crucial. | 
|  | For instance, someone may hand-edit one or more resources to achieve | 
|  | the same result as a merge, or hand-edit the result of a merge in a | 
|  | way which significantly alters the change.  Either way, one might | 
|  | still want to represent that the change does still exist in the | 
|  | target line.  In general, humans who claim that they know better | 
|  | than the tool should be trusted.</p></li> | 
|  |  | 
|  | <li><p>The question "What branches contain this exact version of file | 
|  | X?" is important.  (In Subversion, that would be "What paths contain | 
|  | this exact version of X?")  This may imply exposing some sort of | 
|  | unique object identifier, more than we offer so far.  This desire | 
|  | was also noted at the | 
|  | <a | 
|  | href="http://svn.collab.net/repos/svn/trunk/notes/EuroOSCON-2005-vc-bof.txt" | 
|  | >EuroOSCON 2005 Version Control BOF session</a>, search for | 
|  | "What branches/tags is this version of this file present in?".</p></li> | 
|  |  | 
|  | <li><p>Same as above, but for changes: "What branches include change | 
|  | C?"</p></li> | 
|  |  | 
|  | <li><p>The ability to push a given change out to multiple branches. | 
|  | Selection mechanisms for destinations should be sophisticated.  For | 
|  | example, select all branches that have a common ancestor with the | 
|  | source branch of the change, all branches except an exclusion set, | 
|  | all branches matching a regular expression, etc.  The medical | 
|  | systems manufacturer does this type of operation daily.</p> | 
|  |  | 
|  | <p>The exact same desire was expressed at the | 
|  | <a | 
|  | href="http://svn.collab.net/repos/svn/trunk/notes/EuroOSCON-2005-vc-bof.txt" | 
|  | >EuroOSCON 2005 Version Control BOF session</a>, see the item | 
|  | containing the string "find my descendants" in that document.</p></li> | 
|  |  | 
|  | <li><p>Surprisingly, <code>svn blame</code> improvements were not a high | 
|  | priority.  The current output (which presumably would show the | 
|  | revision in which a merge took place, rather than the original | 
|  | source revision), was deemed generally okay.  Possibly, revisions | 
|  | which are marked as merges should be displayed as such, so that the | 
|  | user knows to drill down further.</p></li> | 
|  |  | 
|  | <li><p><code>svn log</code> on a merged revision should be able to | 
|  | automatically provide both who made the original change and who | 
|  | performed the merge.</p></li> | 
|  |  | 
|  | <li><p>A portable, human-readable change format for review would be | 
|  | useful.  Programmatic parsability was not a high priority, | 
|  | however.  An extended patch program was not considered crucial.  The | 
|  | desire for a "Smart patch format" was also noted at the <a | 
|  | href="http://svn.collab.net/repos/svn/trunk/notes/EuroOSCON-2005-vc-bof.txt" | 
|  | >EuroOSCON 2005 Version Control BOF session</a>.</p></li> | 
|  |  | 
|  | <li><p>Visual interfaces to branch/merge management are <em>very</em> | 
|  | useful.  Such a tool could graphically show which branch/revision | 
|  | have been merged where, and the ancestry of a branch.  <a | 
|  | href="http://www.araxis.com/merge/index.html">Araxis Merge</a> was | 
|  | cited as an excellent example of a tool providing the merge | 
|  | managment portion of this type of UI.  The need for GUI interfaces | 
|  | to branch topology was also discussed at the <a | 
|  | href="http://svn.collab.net/repos/svn/trunk/notes/EuroOSCON-2005-vc-bof.txt" | 
|  | >EuroOSCON 2005 Version Control BOF session</a>, search for | 
|  | "display topology".  TODO: Follow-up sessions via WebEx will add | 
|  | more detail here.</p></li> | 
|  |  | 
|  | <li><p>The ability to do foreign branch is very good (for similar | 
|  | reasons to those in the open source world -- many commercial | 
|  | organizations are adopting open source-style practices | 
|  | internally).</p></li> | 
|  |  | 
|  | <li><p>Partial change merging: The merge meta data itself should be | 
|  | atomic.  We record that you either applied a whole change, or | 
|  | not.  Of course, hand edits and the log message may tell a more | 
|  | detailed story.</p></li> | 
|  |  | 
|  | <li><p>Edited merges should be disentanglable and viewable as separate | 
|  | pieces, i.e. [merge] + [edits].  However, this was a nice-to-have | 
|  | than a must-have.</p></li> | 
|  |  | 
|  | <li><p>An option to merging to say "If anything conflicted, then show | 
|  | all merged regions in a conflicted style, even those which did not | 
|  | conflict."</p></li> | 
|  |  | 
|  | <li><p>TortoiseSVN merge is apparently good (it has the Araxis | 
|  | Merge-style "take my version or their version"), but needs a | 
|  | built-in text editor for more involved conflict resolution.</p></li> | 
|  |  | 
|  | <li><p>Format-specific merge tools is an important need.</p></li> | 
|  |  | 
|  | <li><p>The ability to automate merges (e.g. from a stable branch to a | 
|  | development branch), including interfaces for resolving conflicts | 
|  | and handling other errors, is important.  Customers who do | 
|  | multi-thousand file merges stress this.</p></li> | 
|  |  | 
|  | <li><p>Questions users want to ask: "Is this version of foo.c the | 
|  | 'latest' version?  Are there changes out there which are applicable | 
|  | to foo.c, that have not been applied?  What are they?"</p></li> | 
|  |  | 
|  | <li><p>Any action that can be done to a tag/branch (e.g. merge a | 
|  | change, remove a change, etc.) should be hook-protected.  Merging | 
|  | itself should be a first-class hook operation (e.g. commit, | 
|  | revprop-change, etc.)</p></li> | 
|  |  | 
|  | <li><p>The ability to "shadow" versioned resources: Make a branch, but | 
|  | have most of the branch follow the original source, while only a few | 
|  | files are selected for branch development (e.g. "unshadowed").  Is | 
|  | this different from systems which allow you to branch individual | 
|  | resources in the first place?  Can this be achieved with a | 
|  | finer-grained <code>svn switch</code>?  Note: This is related to the | 
|  | shared file storage issue in Subversion's own issue tracker, | 
|  | <a href="http://subversion.tigris.org/issues/show_bug.cgi?id=2286" | 
|  | >issue #2286</a>.  It was also expressed at the | 
|  | <a | 
|  | href="http://svn.collab.net/repos/svn/trunk/notes/EuroOSCON-2005-vc-bof.txt" | 
|  | >EuroOSCON 2005 Version Control BOF session</a>, search for "The | 
|  | One-File-In-Many-Branches Problem" there, which discusses | 
|  | how p4 and ClearCase do this.</p></li> | 
|  |  | 
|  | <li><p>Roll-back should be convenient, and should be recorded as a | 
|  | subtraction event, visible as such in the meta data.  Roll-back was | 
|  | common at a few shops, and more rare at others.</p></li> | 
|  |  | 
|  | <li><p>Asking change C to where it has been ported was not a strong | 
|  | need (e.g. reporting).</p></li> | 
|  |  | 
|  | <li id="distributable-resolution"><p>One group | 
|  | (the <a href="summit-survey.html#financial-information" >financial | 
|  | information company</a>) wanted merge resolution to be distributable | 
|  | across the developer team, rather than limited to one person's | 
|  | working copy.  The same group said they do most of their merging in | 
|  | GUIs, and that the merge process saves reports (when they use the | 
|  | commandline tools, they save the logfiles similarly).  The longest | 
|  | they've looked back is a few weeks, though.</p></li> | 
|  |  | 
|  | <li id="merge-previews"><p>The <a | 
|  | href="summit-survey.html#financial-information" >financial | 
|  | information company</a> also stressed the importance of merge | 
|  | previews, dry runs that would allow them to see conflicts and | 
|  | "non-trivial, non-conflicting" (NTNC) changes in advance.  These | 
|  | previews should be exportable and parseable, so they can be passed | 
|  | around to others.</p></li> | 
|  |  | 
|  | </ul> | 
|  |  | 
|  | </div>  <!-- details --> | 
|  |  | 
|  | </div>  <!-- results --> | 
|  |  | 
|  | </div>  <!-- h2 --> | 
|  | </body> | 
|  | </html> |