VsCode / Git - Openhabian --> auto CRLF

Hi folks,

during my first development for openhabian i was running in some general issues which i can’t solve.

Hopefully you could help me an afterwards, I would create a new Documentation page that’s are any new guy could avoid that frustration.

development Platform: Windows 10

IDE: Visual Studio Code

Problem:

  • after the first pull from Git some *.bash files are automatically converted from LF to CRLF
    I already tried autocrlf in git config –> nothing happens

Has anynone an idea how to fix that? Do we have to update the .gitattributesfile from the repository?

git config:

[core]
	editor = \"C:\\Users\\Patrick Götz\\AppData\\Local\\Programs\\Microsoft VS Code\\bin\\code\" --wait
	autocrlf = false
[user]
	name = Patrick xxxx
	email = xxxxx@gmx.de
[credential "http://192.168.10.10:30005"]
	provider = gitlab
[safe]

These messages are due to an incorrect default value of core.autocrlf on Windows.

The concept of autocrlf is to handle line endings conversions transparently. And it does!

Bad news: the value needs to be configured manually.

Good news: it should only be done one time per Git installation (per project setting is also possible).

How autocrlf works:

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

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

Here crlf = win-style end-of-line marker, lf = unix-style (also used on Mac since Mac OS X).

(pre-osx cr is not affected for any of three options above.)

When does this warning show up (under Windows)?

– `autocrlf` = `true` if you have unix-style `lf` in one of your files (= RARELY),
– `autocrlf` = `input` if you have win-style `crlf` in one of your files (= almost ALWAYS),
– `autocrlf` = `false` – NEVER!

What does this warning mean?

The warning “LF will be replaced by CRLF” says that you (having autocrlf=true) will lose your unix-style LF after commit-checkout cycle (it will be replaced by windows-style CRLF). Git doesn’t expect you to use unix-style LF under Windows.

The warning “CRLF will be replaced by LF” says that you (having autocrlf=input) will lose your windows-style CRLF after a commit-checkout cycle (it will be replaced by unix-style LF). Don’t use input under Windows.

Yet another way to show how autocrlf works

1) true:             x -> LF -> CRLF
2) input:            x -> LF -> LF
3) false:            x -> x -> x

where x is either CRLF (windows-style) or LF (unix-style) and arrows stand for

file to commit -> repository -> checked out file

How to fix

The default value for core.autocrlf is selected during Git installation and stored in system-wide gitconfig (\Program Files\Git\etc\gitconfig on Windows, /etc/gitconfig on Linux). Also there are (cascading in the following order):

– “global” (per-user) gitconfig located at ~/.gitconfig, yet another
– “global” (per-user) gitconfig at $XDG_CONFIG_HOME/git/config or $HOME/.config/git/config and
– “local” (per-repo) gitconfig at .git/config in the working directory.

So, write git config core.autocrlf in the working directory to check the currently used value and

git config --system core.autocrlf false # per-system solution
git config --global core.autocrlf false # per-user solution
git config --local core.autocrlf false # per-project solution

https://stackoverflow.com/questions/1967370/git-replacing-lf-with-crlf

Thank you for that hint, but in every git config (global / User / repository) @ my win10 PC is the autocrlf = false inserted.
Also in VsCode the EOL Option as \n.

My Problem is that it is not working and every checked out file is CRLF :frowning:

Does anyone have an idea what’s wrong?

PS. I tried it on a new Win 10 VM with git and Vscode, and it is the same issue…

I would think so, adding the following to .gitattributes might help:

# Shell scripts — always use Unix line endings
*.sh     text eol=lf
*.bash   text eol=lf

i tried this also an it is not working i don’t know what part git or VsCode is manipulating the files is it working with your setup?