git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [Bug?] git submodule add doesn't respect core.autocrlf

From
LHLars Hjemli <hjemli@gmail.com>
Date
Jun 26, 2008, 08:40 UTC
Message-ID
<8c5c35580806260140g3133817ele6683d56699a9199@mail.gmail.com>
In-Reply-To
<g3vaaq$pm1$1@ger.gmane.org>

On Thu, Jun 26, 2008 at 7:43 AM, Edward Z. Yang <edwardzyang@thewritingpot.com> wrote:

Show 5 quoted lines
> mkdir test
> cd test
> git init
> git config core.safecrlf true
> git config core.autocrlf true
You can work around the problem by issuing the following commands at this point:

echo ".gitattributes -crlf" >> .gitattributes echo ".gitmodules -crlf" >> .gitattributes git add .gitattributes

Show 5 quoted lines
> git submodule add http://repo.or.cz/w/htmlpurifier.git htmlpurifier
>
> You get: "fatal: LF would be replaced by CRLF in .gitmodules" and inspecting .gitmodules reveals that it uses LF, instead of CRLF.
>
> Can anyone reproduce? Thanks.
Yes, this also fails on linux (without the workaround).
To fix it "properly", git-config needs to choose between lf and crlf
(git-submodule uses git-config to write .gitmodules). But this depends
on
* whether the 'configfile' is (or will be!) tracked by git (e.g. .gitmodules)
* whether a crlf-attribute is specified for the 'configfile'
* the setting of core.autocrlf

A simpler solution might be to treat .gitmodules specially in check_safe_crlf(), maybe something like this (possibly wrapped by gmail...):

diff --git a/convert.c b/convert.c
index 1c66844..254a99b 100644
--- a/convert.c
+++ b/convert.c
@@ -91,6 +91,15 @@ static void check_safe_crlf(const char *path, int action,
        if (!checksafe)
                return;

+       /* Dirty hack: git-submodule uses git-config to update .gitmodules, and
+        * there's no reasonable way for git-config to know if the user prefers
+        * crlf or lf line endings for this file. And since it really doesn't
+        * matter, lets just ignore that the line endings might be modified by
+        * a later checkout.
+        */
+       if (!strcmp(path, ".gitmodules"))
+               return;
+
        if (action == CRLF_INPUT || auto_crlf <= 0) {
                /*
                 * CRLFs would not be restored by checkout:

--
larsh
Previous: Edward Z. YangNext: Johannes Schindelin
Message 2 of 3 in “[Bug?] git submodule add doesn't respect core.autocrlf”
  1. Edward Z. YangJun 26, 2008
  2. Lars HjemliJun 26, 2008
  3. write .gitmodules according to core.autocrlfJohannes Schindelin, Jun 26, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.