• E
    merge-recursive: switch directory rename detection default · 8c8e5bd6
    Elijah Newren 提交于
    When all of x/a, x/b, and x/c have moved to z/a, z/b, and z/c on one
    branch, there is a question about whether x/d added on a different
    branch should remain at x/d or appear at z/d when the two branches are
    merged.  There are different possible viewpoints here:
    
      A) The file was placed at x/d; it's unrelated to the other files in
         x/ so it doesn't matter that all the files from x/ moved to z/ on
         one branch; x/d should still remain at x/d.
    
      B) x/d is related to the other files in x/, and x/ was renamed to z/;
         therefore x/d should be moved to z/d.
    
    Since there was no ability to detect directory renames prior to
    git-2.18, users experienced (A) regardless of context.  Choice (B) was
    implemented in git-2.18, with no option to go back to (A), and has been
    in use since.  However, one user reported that the merge results did not
    match their expectations, making the change of default problematic,
    especially since there was no notice printed when directory rename
    detection moved files.
    
    Note that there is also a third possibility here:
    
      C) There are different answers depending on the context and content
         that cannot be determined by git, so this is a conflict.  Use a
         higher stage in the index to record the conflict and notify the
         user of the potential issue instead of silently selecting a
         resolution for them.
    
    Add an option for users to specify their preference for whether to use
    directory rename detection, and default to (C).  Even when directory
    rename detection is on, add notice messages about files moved into new
    directories.
    
    As a sidenote, x/d did not have to be a new file here; it could have
    already existed at some other path and been renamed to x/d, with
    directory rename detection just renaming it again to z/d.  Thus, it's
    not just new files, but also a modification to all rename types (normal
    renames, rename/add, rename/delete, rename/rename(1to1),
    rename/rename(1to2), and rename/rename(2to1)).
    Signed-off-by: NElijah Newren <newren@gmail.com>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    8c8e5bd6
t6046-merge-skip-unneeded-updates.sh 18.6 KB