Re: [Bug?] git submodule add doesn't respect core.autocrlf
- From
- Lars 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