Fwd: Some More Chapter 4 Review

Paul Burba ptburba at gmail.com
Sat Mar 22 09:11:32 CDT 2008


Trying this for a third time...ccing some svn book folks if it doesn't
get through again.

---------- Forwarded message ----------
From: Paul Burba <ptburba at gmail.com>
Date: Wed, Mar 19, 2008 at 11:25 AM
Subject: Some More Chapter 4 Review
To: svnbook-dev at red-bean.com


A few other thoughts from the review of chapter 4 that Julian and I did:

 1) In the Branching and Merging : Basic Merging : Mergeinfo and
 Previews section:

 "Of course, the best way to preview a merge operation is to just do
 it! Remember, running svn merge isn't an inherently risky thing; if
 you don't like the results, simply svn revert -R the changes from your
 working copy and retry the command with different options. The merge
 isn't final until you actually svn commit the results."

 It is risky if you have local modifications, since the revert will
 remove those to.  A user might very well merge a problematic
 revision/range that they know conflicts, resolve the conflicts, then
 merge another range before committing.  A small clarification pointing
 this out might be helpful.

 2) In the Branching and Merging : Advanced Merging : Cherrypicking
 section, the warning and footnote:

 "Did you notice how, in the last example, the merge invocation caused
 two distinct ranges of merges to be applied? The svn merge command
 applied two independent patches to your working copy in order to skip
 over changeset 355, which your branch already contained. There's
 nothing inherently wrong with this, except that it has the potential
 to make conflict resolution more tricky. If the first range of changes
 creates conflicts, you must resolve them interactively in order for
 the merge process to continue and apply the second range of changes.
 If you postpone a conflict from the first wave of changes, the whole
 merge command will bail out with an error message.[21]"

 "[21] At least, this is true in Subversion 1.5 at the time of writing.
 This behavior may improve in future versions of Subversion."

 I'm not sure if the current behavior has "improved", but it allows us
 to postpone a conflict and get a conflict on our conflict, e.g.:

 >echo newer content > merge_tests-90\A\B\E\beta

 >svn ci -m "" merge_tests-90
 Sending        merge_tests-90\A\B\E\beta
 Transmitting file data .
 Committed revision 7.

 >echo conflictor! > merge_tests-90\A_COPY\B\E\beta

 >svn ci -m "" merge_tests-90
 Sending        merge_tests-90\A_COPY\B\E\beta
 Transmitting file data .
 Committed revision 8.

 >svn merge %url%/A merge_tests-90\A_COPY -c5 -c7
 Conflict discovered in 'merge_tests-90/A_COPY/B/E/beta'.
 Select: (p) postpone, (df) diff-full, (e) edit,
        (s) show all options: p
 --- Merging r5 into 'merge_tests-90\A_COPY':
 C    merge_tests-90\A_COPY\B\E\beta
 Conflict discovered in 'merge_tests-90/A_COPY/B/E/beta'.
 Select: (p) postpone, (df) diff-full, (e) edit,
        (s) show all options: p
 --- Merging r7 into 'merge_tests-90\A_COPY':
 C    merge_tests-90\A_COPY\B\E\beta

 >svn pl -vR merge_tests-90
 Properties on 'merge_tests-90\A_COPY':
  svn:mergeinfo : /A:5,7

 >svn diff merge_tests-90

 Property changes on: merge_tests-90\A_COPY
 ___________________________________________________________________
 Added: svn:mergeinfo
   Merged /A:r5,7

 Index: merge_tests-90/A_COPY/B/E/beta
 ===================================================================
 --- merge_tests-90/A_COPY/B/E/beta      (revision 8)
 +++ merge_tests-90/A_COPY/B/E/beta      (working copy)
 @@ -1 +1,8 @@
 +<<<<<<< .working
 +<<<<<<< .working
  conflictor!
 +=======
 +New content>>>>>>> .merge-right.r5
 +=======
 +newer content
 +>>>>>>> .merge-right.r7

 >

 3) Branching and Merging : Advanced Merging : Undoing Changes section:

 If after using a reverse merge to roll-back a change, we then change
 our minds *again* and want to re-apply the change with a forward merge
 we need to use --ignore-ancestry.  Otherwise the merge logic thinks
 that the change is already present (it's in the merge target's natural
 history after all) and doesn't attempt the merge, thinking it is a
 repeated merge attempt.  This is ultimately attributable to the fact
 that mergeinfo doesn't currently have a way of recording reversed
 merges.  Maybe you want to make a note of this?

 4) Branching and Merging : Advanced Merging : Merge-Sensitive Logs and
 Annotations section:

 This boxed example needs a minor update:

 $ svn log -v -r 390 -g
 ------------------------------------------------------------------------
 r390 | user | 2002-11-22 11:01:57 -0600 (Fri, 22 Nov 2002) | 1 line
 Changed paths:
   M /branches/my-calc-branch/button.c
   M /branches/my-calc-branch/README

 Final merge of trunk changes to my-calc-branch.
 ------------------------------------------------------------------------
 r383 | sally | 2002-11-21 03:19:00 -0600 (Thu, 21 Nov 2002) | 2 lines
 Changed paths:
   M /branches/my-calc-branch/button.c
 Result of a merge from: r390
       ^^^
 This language is now "Merged via: r390"

 Paul




More information about the svnbook-dev mailing list