Re: mingw, windows, crlf/lf, and git
From: Linus Torvalds <torvalds@linux-foundation.org>
Date: 2016-06-15 22:42:54
Subsystem:
the rest · Maintainer:
Linus Torvalds
On Tue, 13 Feb 2007, Mark Levedahl wrote:
The ternary value is definitely useful. As noted elsewhere, most tools on windows are very happy with \n ending, few honor those line endings when files are modified, and fewer still allow the user to specify use of \n for new files. However, cygwin tools in particular are not tolerant of crlf, so for that environment it makes sense to banish crlf and the input-only option is most likely the best default setting there.
Here's a UNTESTED patch on top of the patch I already sent, which allows you to do [core] AutoCRLF = input and it should do only the CRLF->LF translation (ie it simplifies CRLF only when reading working tree files, but when checking out files, it leaves the LF alone, and doesn't turn it into a CRLF). And by "untested" I mean that it looks ok and seems to compile, but I really didn't do anything else. Linus ---
diff --git a/config.c b/config.c
index ffe0212..e8ae919 100644
--- a/config.c
+++ b/config.c@@ -325,6 +325,10 @@ int git_default_config(const char *var, const char *value) } if (!strcmp(var, "core.autocrlf")) { + if (value && !strcasecmp(value, "input")) { + auto_crlf = -1; + return 0; + } auto_crlf = git_config_bool(var, value); return 0; }
diff --git a/convert.c b/convert.c
index c04b6c2..b5a47c2 100644
--- a/convert.c
+++ b/convert.c@@ -133,7 +133,7 @@ int convert_to_working_tree(const char *path, char **bufp, unsigned long *sizep) * based on filename patterns. Right now we just do the * stupid auto-CRLF one. */ - if (!auto_crlf) + if (auto_crlf <= 0) return 0; size = *sizep;
diff --git a/environment.c b/environment.c
index 2fa0960..570e32a 100644
--- a/environment.c
+++ b/environment.c@@ -28,7 +28,7 @@ size_t packed_git_window_size = DEFAULT_PACKED_GIT_WINDOW_SIZE; size_t packed_git_limit = DEFAULT_PACKED_GIT_LIMIT; int pager_in_use; int pager_use_color = 1; -int auto_crlf = 0; +int auto_crlf = 0; /* 1: both ways, -1: only when adding git objects */ static const char *git_dir; static char *git_object_dir, *git_index_file, *git_refs_dir, *git_graft_file;