As it happens, I recently »inherited« a Git repository.
It turned out that all files had been submitted with Windows line endings, also known as CRLF.
core.autocrlf wasn't set, they were stored as such in the repository.
Since it was a private repository that wasn't published anywhere (that I knew of or cared about), I decided to rewrite its history as a first step.
I wanted to use Git's own conversion rather than relying on external tools such as
fromdos, so I activated it using
Then I wrote a small shell script called
$ git config core.autocrlf input
readd.sh that re-adds the current commit and triggers Git's line-ending conversion:
#!/bin/sh git rm --cached -r . git add -f .The
addensures that even files that are in
.gitignoreare re-added. Yes, they even managed to submit ignored files into their repository...
As a last step, I used
filter-branch to process every commit and apply my script.
$ git filter-branch --tree-filter "$HOME/readd.sh" -- --all
Since it was a very small repository, the entire process took only a matter of seconds, and I was left with a clean state with normalised line endings.