[!NOTE|label:references:]

list

list eol in repo

$ git ls-files --eol

# list all crlf
$ git ls-files --eol | grep '/crlf'

# list all lf which not been controlled by gitattributes file
$ git ls-files --eol | grep -E '[iw]/lf' | grep -v -E 'attr/.+eol='
  • or

    $ find . -type f -exec sh -c "file {} | grep 'with CRLF'" \;
    # or
    $ find . -type f -follow -print0 | xargs -0 file | grep 'with CRLF'
    
    # or get file list
    $ find . -type f -exec sh -c "file {} | grep 'with CRLF'" \; | awk -F':' '{print $1}'
    

list config

  • get all config : --get-all
    $ git config --show-origin --show-scope --get-all core.autocrlf
    global   file:/home/marslo/.gitconfig    false
    local    file:.git/config    input
    
  • get active config : --get

    $ git config --show-origin --show-scope --get core.autocrlf
    local file:.git/config  input
    
  • core.eol

    $ git config --show-origin --show-scope --get core.eol
    global  file:/home/marslo/.gitconfig    lf
    $ git config --show-origin --show-scope --get-all core.eol
    global  file:/home/marslo/.gitconfig    lf
    
  • core.safecrlf

    $ git config --show-origin --show-scope --get-all core.safecrlf
    global   file:/home/marslo/.gitconfig    warn
    

check one by one

  • worktree

    $ git config --worktree --show-scope --show-origin --get-all core.autocrlf
    local    file:.git/config    input
    
  • local

    $ git config --local --show-scope --show-origin --get-all core.autocrlf
    local    file:.git/config    input
    
  • system

    $ git config --system --show-scope --show-origin --get-all core.autocrlf
    
  • global

    $ git config --global --show-scope --show-origin --get-all core.autocrlf
    global   file:/home/marslo/.gitconfig    false
    

theory

core.autocrlf

parameters

core.autocrlf false input true
git commit lf > lf
cr > cr
crlf > crlf
lf > lf
cr > cr
crlf > lf
lf > lf
cr > cr
crlf > lf
git checkout lf > lf
cr > cr
crlf > crlf
lf > lf
cr > cr
crlf > crlf
lf > lf
cr > cr
crlf > crlf

normally, it will looks like

core.autocrlf=true:      core.autocrlf=input:     core.autocrlf=false:

        repo                     repo                     repo
      ^      V                 ^      V                 ^      V
     /        \               /        \               /        \
crlf->lf    lf->crlf     crlf->lf       \             /          \
   /            \           /            \           /            \

set in GUI

git line ending setup
1.4.3.4.1 -- git line ending setup
  • checkout Windows-style, commit Unix-style line endings:

    $ git config --global core.autocrlf true
    
    • Text files checked-out from the repository that have only LF characters are normalized to CRLF in your working tree; files that contain CRLF in the repository will not be touched
    • Text files that have only LF characters in the repository, are normalized from CRLF to LF when committed back to the repository. Files that contain CRLF in the repository will be committed untouched.
  • Checkout as-is, commit Unix-Style line endings:

    $ git config --global core.autocrlf input
    
    • Text files checked-out from the repository will keep original EOL characters in your working tree.
    • Text files in your working tree with CRLFcharacters are normalized to LF when committed back to the repository.
  • Checkout as-is, commit as-is:

    $ git config --global core.autocrlf false
    
    • core.eol dictates EOL characters in the text files of your working tree.
    • core.eol = native by default, which means Windows EOLs are CRLF and *nix EOLs are LF in working trees.
    • Repository gitattributes settings determines EOL character normalization for commits to the repository (default is normalization to LF characters).

please notice

eol

This attribute sets a specific line-ending style to be used in the working directory. It enables end-of-line conversion without any content checks, effectively setting the text attribute. Note that setting this attribute on paths which are in the index with CRLF line endings may make the paths to be considered dirty. Adding the path to the index again will normalize the line endings in the index.

practice

force using lf in both remote and local

$ git config core.eol lf
$ git config core.autocrlf input
  • or
    $ git config --global core.eol lf
    $ git config --global core.autocrlf input
    

ignore warning: LF will be replaced by CRLF

$ git config --global core.safecrlf false
Copyright © marslo 2020-2023 all right reserved,powered by GitbookLast Modified: 2024-01-05 14:43:55

results matching ""

    No results matching ""