Skip to content
  • Eyvind Bernhardsen's avatar
    Avoid conflicts when merging branches with mixed normalization · f217f0e8
    Eyvind Bernhardsen authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    Currently, merging across changes in line ending normalization is
    painful since files containing CRLF will conflict with normalized files,
    even if the only difference between the two versions is the line
    endings.  Additionally, any "real" merge conflicts that exist are
    obscured because every line in the file has a conflict.
    
    Assume you start out with a repo that has a lot of text files with CRLF
    checked in (A):
    
          o---C
         /     \
        A---B---D
    
    B: Add "* text=auto" to .gitattributes and normalize all files to
       LF-only
    
    C: Modify some of the text files
    
    D: Try to merge C
    
    You will get a ridiculous number of LF/CRLF conflicts when trying to
    merge C into D, since the repository contents for C are "wrong" wrt the
    new .gitattributes file.
    
    Fix ll-merge so that the "base", "theirs" and "ours" stages are passed
    through convert_to_worktree() and convert_to_git() before a three-way
    merge.  This ensures that all three stages are normalized in the same
    way, removing from consideration differences that are only due to
    normalization.
    
    This feature is optional for now since it changes a low-level mechanism
    and is not necessary for the majority of users.  The "merge.renormalize"
    config variable enables it.
    
    Signed-off-by: default avatarEyvind Bernhardsen <eyvind.bernhardsen@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    f217f0e8