threads / discuss / 33111

Ignore pattern with trailing whitespace in .gitignore is void using git 1.8.1.5

Subject: Ignore pattern with trailing whitespace in .gitignore is void using git 1.8.1.5

## tl;dr

3 messages between Mar 9, 2013 and Mar 9, 2013.

replies: 2people: 2as markdown or json

Thor Andreas Rognan· Mar 9, 2013, 01:36 UTC · lore
Hi guys,

Maybe I'm doing it wrong, or maybe it's the intended behaviour, but I find that a trailing whitespace after a pattern in .gitignore makes the pattern void with git 1.8.1.5.

It's a subtle error to make, although cleaning undesired commits from the git history can be educational and fun in itself.

How to reproduce:

$ > mkdir -p ~/tmp/git-ignore-test/ \ && cd ~/tmp/git-ignore-test/ \ && touch .gitignore .secret-passwords .secret-passwords.swp \ && echo ".*.sw? " > .gitignore \ && echo ".secret-passwords" >> .gitignore \ && git init && git status

Remove the white space after ``` .*.sw?``` in .gitignore to see the .swp file disappear:

$ > echo -e ".*.sw?\n.secret-passwords" > .gitignore > .gitignore \ && git status

You will of course have to temporarily disable your global .gitignore file if you handle vim swap files correctly there.

I am using git 1.8.1.5 installed with homebrew on os x 10.8.2.
Junio C Hamano· Mar 9, 2013, 05:25 UTC · re: Thor Andreas Rognan · lore

Re: Ignore pattern with trailing whitespace in .gitignore is void using git 1.8.1.5

Thor Andreas Rognan <thor.rognan@gmail.com> writes:
> Maybe I'm doing it wrong, or maybe it's the intended behaviour,
> but I find that a trailing whitespace after a pattern in .gitignore
> makes the pattern void with git 1.8.1.5.
I doubt we do anything clever like that.
        $ git init
        $ touch hello.o "hello.o " "hello.o  " hello.c
        $ echo "*.o " >.gitignore
        $ git status | cat -e
        # On branch master$
        #$
        # Initial commit$
        #$
        # Untracked files:$
        #   (use "git add <file>..." to include in what will be committed)$
        #$
        #       .gitignore$
        #       hello.c$
        #       hello.o$
        #       hello.o  $
        nothing added to commit but untracked files present (use "git add" to track)$
        
The user tells to ignore anything followed by a dot followed by a
lowercase Oh followed by a SP.  We ignore "hello. ", but not "hello.o"
nor "hello.o  " (two SPs at the end), just as told.
Junio C Hamano· Mar 9, 2013, 06:28 UTC · re: Junio C Hamano · lore

Re: Ignore pattern with trailing whitespace in .gitignore is void using git 1.8.1.5

Junio C Hamano <gitster@pobox.com> writes:
Show 11 quoted lines
> Thor Andreas Rognan <thor.rognan@gmail.com> writes:
>
>> Maybe I'm doing it wrong, or maybe it's the intended behaviour,
>> but I find that a trailing whitespace after a pattern in .gitignore
>> makes the pattern void with git 1.8.1.5.
>
> I doubt we do anything clever like that.
> ...
> The user tells to ignore anything followed by a dot followed by a
> lowercase Oh followed by a SP.  We ignore "hello. ", but not "hello.o"
> nor "hello.o  " (two SPs at the end), just as told.

Of course, having said all that, I do not think anybody objects too deeply against a patch that change the behaviour to ignore trailing whitespaces, as long as the patch leaves an escape hatch to allow people who do want to specify a pattern that matches with pathnames with trailing whitespaces. Without thinking it through, perhaps

	echo '*.o\ ' >.gitignore
or something?

Technically speaking, such a change is a regression, but I doubt that many people would mind it too much.

← back to recent threads