For some reasons you may want to change all line endings of your text files to LF instead of CRLF, here is how to do it.
1. Create a .gitattributes file at the root of your project
Specify the files that you want end of line (eol) to change by using regex.
Here is a sample file for a Java project:
# Handle line endings automatically for files detected as text # and leave all files detected as binary untouched. * text=auto # # The above will handle all files NOT found below # # These files are text and should be normalized (Convert crlf => lf) *.css eol=lf *.df eol=lf *.htm eol=lf *.html eol=lf *.java eol=lf *.js eol=lf *.json eol=lf *.jsp eol=lf *.jspf eol=lf *.jspx eol=lf *.properties eol=lf *.sh eol=lf *.tld eol=lf *.txt eol=lf *.tag eol=lf *.tagx eol=lf *.xml eol=lf *.yml eol=lf # These files are binary and should be left untouched # (binary is a macro for -text -diff) *.class binary *.dll binary *.ear binary *.gif binary *.ico binary *.jar binary *.jpg binary *.jpeg binary *.png binary *.so binary *.war binary
2. Remove all project files
git rm --cached -rf /path/to/your/project
3. Re-create all files (from source tree)
git diff --cached --name-only -z | xargs -n 50 -0 git add -f
The above command does:
- a diff between your local project and your local git repository, because you have deleted all files it will return all file names from source tree
- read results from ‘git diff’ and pass the file names to ‘git add’ (thanks to ‘xargs’)
- add back all files, and this time the EOL policy will be applied thanks to the .gitattributes file
4. Commit and push your changes