threads / discuss / 37719

$GIT_DIR/info/exclude fails to negate a pattern defined by core.excludesfile

Subject: $GIT_DIR/info/exclude fails to negate a pattern defined by core.excludesfile

## tl;dr

4 messages between Oct 12, 2014 and Oct 13, 2014.

replies: 3people: 2as markdown or json

Dun Peal· Oct 12, 2014, 02:58 UTC · lore

I have the pattern `*.out` defined in my `core.excludesfile`. According to the documentation[1], patterns defined in `$GIT_DIR/info/exclude` take precedence over `core.excludesfile`, so for one particular project that needs to track some `.out` files, I created `$GIT_DIR/info/exclude` with just one pattern: `!*.out`.

Yet for some reason, `git status` still fails to report newly created `.out` files for that project. Am I misunderstanding the documentation?

Thanks, D.
[1] http://jk.gs/gitignore.html
Dun Peal· Oct 12, 2014, 14:48 UTC · re: Dun Peal · lore

Re: $GIT_DIR/info/exclude fails to negate a pattern defined by core.excludesfile

I used `check-ignore -v`, and the `.out` file is being ignored by the `*.out` pattern in the `core.excludesfile` file. Its parent folder is not being ignored. So as a rule, `core.excludesfile` overrides `$GIT_DIR/info/exclude`.

That doesn't make much sense to me, because I'm much more likely to want to override global exclusions for a specific project, than override specific project settings with a global exclusion file (that last one really makes no sense imho).

Thoughts?
On Sat, Oct 11, 2014 at 10:58 PM, Dun Peal <dunpealer@gmail.com> wrote:
Show 13 quoted lines
> I have the pattern `*.out` defined in my `core.excludesfile`.
> According to the documentation[1], patterns defined in
> `$GIT_DIR/info/exclude` take precedence over `core.excludesfile`, so
> for one particular project that needs to track some `.out` files, I
> created `$GIT_DIR/info/exclude` with just one pattern: `!*.out`.
>
> Yet for some reason, `git status` still fails to report newly created
> `.out` files for that project. Am I misunderstanding the
> documentation?
>
> Thanks, D.
>
> [1] http://jk.gs/gitignore.html
Duy Nguyen· Oct 12, 2014, 23:53 UTC · re: Dun Peal · lore

Re: $GIT_DIR/info/exclude fails to negate a pattern defined by core.excludesfile

On Sun, Oct 12, 2014 at 9:58 AM, Dun Peal <dunpealer@gmail.com> wrote:
Show 9 quoted lines
> I have the pattern `*.out` defined in my `core.excludesfile`.
> According to the documentation[1], patterns defined in
> `$GIT_DIR/info/exclude` take precedence over `core.excludesfile`, so
> for one particular project that needs to track some `.out` files, I
> created `$GIT_DIR/info/exclude` with just one pattern: `!*.out`.
>
> Yet for some reason, `git status` still fails to report newly created
> `.out` files for that project. Am I misunderstanding the
> documentation?

We process in groups, so rules in core.excludesfile are in one group, those in $GIT_DIR/info/exclude in another group. Negative patterns only has effects within their group, so !*out in .../exclude can't revert *.out in core.excludesfile. Probably implementation limitation, not by design..

But even if we flatten them into one group, i'm not sure you can achieve that. The patterns would be

!*.out *.out

"!*.out" has nothing to revert because it's before "*.out".
-- 
Duy
Dun Peal· Oct 13, 2014, 13:23 UTC · re: Duy Nguyen · lore

Re: $GIT_DIR/info/exclude fails to negate a pattern defined by core.excludesfile

Hey Duy,

I'm not sure why the pattern would have to be as you describe - I'm just looking to ignore `*.out` as a general configuration, and disable it for one specific project, so it would seem a plain `!*.out` should work.

In any case, I added a `.gitignore` file with the single pattern `!*.out` at the root of the project, and now .out files are no longer ignored for the project.

It's not an ideal solution because now all the other developers of the project who do not have `*.out` in their `core.excludesfile` will have an unnecessary pattern in their exclusion logic, but it does work as expected.

Thanks, D.
On Sun, Oct 12, 2014 at 7:53 PM, Duy Nguyen <pclouds@gmail.com> wrote:
Show 26 quoted lines
> On Sun, Oct 12, 2014 at 9:58 AM, Dun Peal <dunpealer@gmail.com> wrote:
>> I have the pattern `*.out` defined in my `core.excludesfile`.
>> According to the documentation[1], patterns defined in
>> `$GIT_DIR/info/exclude` take precedence over `core.excludesfile`, so
>> for one particular project that needs to track some `.out` files, I
>> created `$GIT_DIR/info/exclude` with just one pattern: `!*.out`.
>>
>> Yet for some reason, `git status` still fails to report newly created
>> `.out` files for that project. Am I misunderstanding the
>> documentation?
>
> We process in groups, so rules in core.excludesfile are in one group,
> those in $GIT_DIR/info/exclude in another group. Negative patterns
> only has effects within their group, so !*out in .../exclude can't
> revert *.out in core.excludesfile. Probably implementation limitation,
> not by design..
>
> But even if we flatten them into one group, i'm not sure you can
> achieve that. The patterns would be
>
> !*.out
> *.out
>
> "!*.out" has nothing to revert because it's before "*.out".
> --
> Duy

← back to recent threads