Re: git: b1f7154cb125 - main - gitignore: ignore vim swap files & .rej/.orig

From: Drew Gallatin <gallatin_at_netflix.com>
Date: Fri, 11 Feb 2022 14:38:24 UTC
On Fri, Feb 11, 2022 at 4:38 AM Kristof Provost <kp@freebsd.org> wrote:

> On 11 Feb 2022, at 2:25, Andrew Gallatin wrote:
>
> On 1/17/22 04:35, Alexander V. Chernikov wrote:
>
> The branch main has been updated by melifaro:
>
> URL:
> https://urldefense.com/v3/__https://cgit.FreeBSD.org/src/commit/?id=b1f7154cb12517162a51d19ae19ec3f2dee88e11__;!!OToaGQ!4Lozvj8S2Opxre6qHuywX_aNhwm1heXl1CyQyb0N5f_fiBJEkTQGhLzE7KlqqP9C7A$
>
> commit b1f7154cb12517162a51d19ae19ec3f2dee88e11
> Author: Alexander V. Chernikov <melifaro@FreeBSD.org>
> AuthorDate: 2022-01-08 16:14:47 +0000
> Commit: Alexander V. Chernikov <melifaro@FreeBSD.org>
> CommitDate: 2022-01-17 09:35:15 +0000
>
> gitignore: ignore vim swap files & .rej/.orig
> Reviewed by: cem, avg
> MFC after: 2 weeks
>
> Hi,
>
> I was wondering if you might consider reverting this change?
> Alternatively, can you teach me how to override this file
> locally without carrying a diff?
>
> I'm asking because this makes life painful for my workflow.
>
> Having git clean be able to handle .orig and .rej is incredibly
> handy when applying large patch sets. It makes finding a rejected
> patch as simple as 'git clean -n | grep rej'.
>
> Would ‘git clean -n -x’ work for you?
>
>    -x
>        Don’t use the standard ignore rules (see gitignore(5)), but still use
>        the ignore rules given with -e options from the command line. This
>        allows removing all untracked files, including build products. This
>        can be used (possibly in conjunction with git restore or git reset)
>        to create a pristine working directory to test a clean build.
>
>
Yes, except it would delete our .obj directories, which I don't want.  The
-x is how I figured out the .gitignore had been changed.


> Alternatively, the gitignore(5) man page also mentions that patterns can
> be listed in
>
>    •   Patterns read from $GIT_DIR/info/exclude.
>
>    •   Patterns read from the file specified by the configuration variable
>        core.excludesFile.
>
> So I’d think you can overrule things you don’t like from the repo
> gitignore file in $GIT_DIR/info/exclude or in your global git
> configuration, especially combined with this:
>
>    •   An optional prefix "!" which negates the pattern; any matching file
>        excluded by a previous pattern will become included again. It is not
>        possible to re-include a file if a parent directory of that file is
>        excluded. Git doesn’t list excluded directories for performance
>        reasons, so any patterns on contained files have no effect, no matter
>        where they are defined. Put a backslash ("\") in front of the first
>        "!" for patterns that begin with a literal "!", for example,
>        "\!important!.txt".
>
> Kristof
>

The problem seems to be that all of these solutions are processed *FIRST*,
before a .gitignore in the repo, so they cannot be used to negate a
gitignore rule in the repo.  Eg:

<9:32am>beast/gallatin:work1>kdump | grep NAMI | egrep exclude\|gitignore |
head
 42947 git      NAMI  "/home/gallatin/.gitignore"
 42947 git      NAMI  "/home/gallatin/.gitignore"
 42947 git      NAMI  "/data/ocafirmware/.git/info/exclude"
 42947 git      NAMI  "/data/ocafirmware/.git/info/exclude"
 42947 git      NAMI  ".gitignore"
 42947 git      NAMI  "FreeBSD/.gitignore"

9:34am>beast/gallatin:work1>cat ~/.gitignore
!*.orig
!*.rej

<9:35am>beast/gallatin:work1>git clean -n | grep rej
<9:35am>beast/gallatin:work1>git clean -xn | grep rej
Would remove FreeBSD/sys/dev/mlx5/mlx5_en/en_hw_tls.h.rej

This makes a stronger case that those who want to ignore .orig and .rej
files can add them to *their* local .gitignore, and we should back them out
of the .gitignore for the project.

Drew