I was searching for the proper setting to be used as per certain use cases but could not find any source describing the same. Therefore, I am asking this question to serve as a solution to anyone looking for the correct setting for git's autocrlf option.
Use Case 1: I am on Mac, the other developers are all on Windows. They are managing the source code before I joined in.
Use Case 2: I am on Windows, the other developers are all on Mac. They are managing the source code before I joined in.
Use Case 3: I am on Linux, the other developers are all on Windows. They are managing the source code before I joined in.
Use Case 4: I am on Windows, the other developers are all on linux. They are managing the source code before I joined in.
Use Case 5: I am on Linux, the other developers are all on Mac. They are managing the source code before I joined in.
Use Case 6: I am on Mac, the other developers are all on Linux. They are managing the source code before I joined in.
What setting of git core.autocrlf should I be using ?
EDIT: Why this question is not a duplicate to many similar questions:
All other questions and their answers provide the required facts and knowledge that leaves a lot to be done by the reader. This question aims at asking the specific answer to specific scenarios.
autocrlf is set to true, Git will automatically convert Windows line endings ( 0x0D 0x0A ) to Unix line endings ( 0x0A ) when adding/commit files to the index/repository and do the reverese when doing the opposite. The idea of this behavior is to ensure that file hashes stay the same regardless of their line endings.
The git config core. autocrlf command is used to change how Git handles line endings. It takes a single argument. On Windows, you simply pass true to the configuration.
Whereas Windows follows the original convention of a carriage return plus a line feed ( CRLF ) for line endings, operating systems like Linux and Mac use only the line feed ( LF ) character. The history of these two control characters dates back to the era of the typewriter.
For cross-platform projects this is the recommended setting on Unix ("core. autocrlf" is set to "input").
Simple:
git config core.autocrlf false
(for all and any scenario)
core.autocrlf
is a config, which means it is not pushed or cloned with the repo: it has to be set by the user.
It was the legacy way to handle eol at the repo level.
What you want to use (add or modify depending on your scenario) are gitattributes core.eol
directives.
.gitattributes
is a file which can be managed in the git repo like any other file. Once you agree on an eol policy, that policy will be enforced at each clone.core.eol
directives for a file, or group of files if you want (as opposed to the global repository-wide config core.autocrlf
)For heterogeneous environment, the core.eol (only for the files you deem problematic) should be native
(if you suspect your editor insist on using the system eol instead of using the one already present in the file).
For more, see "Mind the End of Your Line".
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With