Subject: Re: Precious files and the .jj directory

From: Junio C Hamano <[email-masked]>
Date: Tue, 22 Jul 2025 10:09:19 -0700

Jade Lovelace <[email-masked]> writes:

> I'm aware of the many discussions about precious files [1] [2] [3],
> but I wanted to highlight a particularly pernicious category of
> precious files that are really hard to do the right thing about with
> Git: namely, other version control systems. In particular, as I
> learned in [4], `git clean -ixd` will of course list `.jj` to delete
> and delete it if you have it in gitignore. But yet having it untracked
> results in it possibly accidentally getting added and also clutters up
> `git status`.

Yes, that is a very concise summary of what happens if you do not
support "ignored but precious" as a class of files distinct from
"ignored and expendable".  Git only supports the latter and we wish
we had also the former is where we are, after "many discussions" you
have read.

> It's my understanding that git has more file deletion edge cases of
> gitignored files than of untracked ones so the latter is theoretically
> safer. Is that correct?

Sorry, but I am not sure what apples and oranges you are comparing.

You list a thing in the .gitignore file or the .git/info/exclude
file (collectively known as "exclude mechanism") and the thing
becomes "ignored an dexpendable".  Your "add" will warn when you try
to add it, because it is ignored.  Your "checkout", "merge", etc.,
will happily overwrite such a path when it needs to be removed to
make room, because it is expendable.

You do not tell about a thing to the exclude mechanism, and the
thing is "untracked, not ignored".  Your "add" will happily add such
a path, because it is not ignored.  Your "checkout" and others will
play safer and more careful, avoid removing it, stop operation that
needs to remove the path in order to continue, because it is not
expendable.

The only solution would be to add proper support for ignored but
precious, I would think.