From: Josh Triplett <josh@joshtriplett.org>
To: Junio C Hamano <gitster@pobox.com>
Cc: Sebastian Thiel <sebastian.thiel@icloud.com>, git@vger.kernel.org
Subject: Re: [RFC] Define "precious" attribute and support it in `git clean`
Date: Sat, 14 Oct 2023 13:59:36 +0800 [thread overview]
Message-ID: <ZSouSI_zPusOefsv@localhost> (raw)
In-Reply-To: <xmqqttqytnqb.fsf@gitster.g>
On Tue, Oct 10, 2023 at 10:02:20AM -0700, Junio C Hamano wrote:
> Sebastian Thiel <sebastian.thiel@icloud.com> writes:
>
> > I'd like to propose adding a new standard gitattribute "precious".
>
> ;-).
>
> Over the years, I've seen many times scenarios that would have been
> helped if we had not just "tracked? ignored? unignored?" but also
> the fourth kind [*]. The word "ignored" (or "excluded") has always
> meant "not tracked, not to be tracked, and expendable" to Git, and
> "ignored but unexpendable" class was missing. I even used the term
> "precious" myself in those discussions. At the concept level, I
> support the effort 100%, but as always, the devil will be in the
> details.
"I've already wanted this for years" is, honestly, the best response we
could *possibly* have hoped for.
> Scenarios that people wished for "precious" traditionally have been
>
> * You are working on 'master'. You have in your .gitignore or
> .git/info/exclude a line to ignore path A, and have random
> scribbles in a throw-away file there. There is another branch
> 'seen', where they added some tracked contents at path A/B. You
> do "git checkout seen" and your file A that is an expendable file,
> because it is listed as ignored in .git/info/exclude, is removed
> to make room for creating A/B.
Ouch, I hadn't even thought about the issue of branch-switching
overwriting a file like that, but that's another great reason to have
"precious". (I've been thinking about "precious" as primarily to protect
files like `.config`, where they'd be unlikely to be checked in on any
branch because they have an established purpose in the project. Though,
of course, people *do* sometimes check in `.config` files in
special-purpose branches that aren't meant for upstreaming.)
> * Similar situation, but this time, 'seen' branch added a tracked
> contents at path A. Again, "git checkout seen" will discard the
> expendable file A and replace it with tracked contents.
>
> * Instead of "git checkout", you decide to merge the branch 'seen'
> to the checkout of 'master', where you have an ignored path A.
> Because merging 'seen' would need to bring the tracked contents
> of either A/B (in the first scenario above) or A (in the second
> scenario), your "expendable" A will be removed to make room.
+1
> In previous discussions, nobody was disturbed that "git clean" was
> unaware of the "precious" class, but if we were to have the
> "precious" class in addition to "ignored" aka "expendable", I would
> not oppose to teach "git clean" about it, too.
>
> There was an early and rough design draft there in
>
> https://lore.kernel.org/git/7vipsnar23.fsf@alter.siamese.dyndns.org/
>
> which probably is worth a read, too.
>
> Even though I referred to the precious _attribute_ in some of these
> discussions, between the attribute mechanism and the ignore
> mechanism, I am actually leaning toward suggesting to extend the
> exclude/ignore mechanism to introduce the "precious" class. That
> way, we can avoid possible snafu arising from marking a path in
> .gitignore as ignored, and in .gitattrbutes as precious, and have to
> figure out how these two settings are to work together.
Sounds reasonable.
> In any case, the "precious" paths are expected to be small minority
> of what people never want to "git add" or "git commit", so coming up
> with a special syntax to be used in .gitignore, even if that special
> syntax is ugly and cumbersome to type, would be perfectly OK.
[Following up both to this and to Sebastian's response.]
One potentially important question: should the behavior of old git be to
treat precious files as ignored, or as not-ignored? If the syntax were
something like
$.config
then old git would treat the file as not-ignored. If the syntax were
something like
$precious
.config
then old git would treat the file as ignored.
Seems like it would be obtrusive if `git status` in old git showed the
file, and `git add .` in old git added it.
next prev parent reply other threads:[~2023-10-14 6:00 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-10 12:37 [RFC] Define "precious" attribute and support it in `git clean` Sebastian Thiel
2023-10-10 13:38 ` Kristoffer Haugsbakk
2023-10-10 14:10 ` Josh Triplett
2023-10-10 17:07 ` Junio C Hamano
2023-10-12 8:47 ` Josh Triplett
2023-10-10 19:10 ` Kristoffer Haugsbakk
2023-10-12 9:04 ` Josh Triplett
2023-10-10 17:02 ` Junio C Hamano
2023-10-11 10:06 ` Richard Kerry
2023-10-11 22:40 ` Jeff King
2023-10-11 23:35 ` Junio C Hamano
2023-10-12 10:55 ` Sebastian Thiel
2023-10-12 16:58 ` Junio C Hamano
2023-10-13 9:09 ` Sebastian Thiel
2023-10-13 16:39 ` Junio C Hamano
2023-10-14 7:30 ` Sebastian Thiel
2023-10-13 10:06 ` Phillip Wood
2023-10-14 16:10 ` Junio C Hamano
2023-10-13 11:25 ` Oswald Buddenhagen
2023-10-14 5:59 ` Josh Triplett [this message]
2023-10-14 17:41 ` Junio C Hamano
2023-10-15 6:44 ` Elijah Newren
2023-10-15 7:33 ` Sebastian Thiel
2023-10-15 16:31 ` Junio C Hamano
2023-10-16 6:02 ` Sebastian Thiel
2023-10-23 7:15 ` Sebastian Thiel
2023-10-29 6:44 ` Elijah Newren
2023-10-11 21:41 ` Kristoffer Haugsbakk
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZSouSI_zPusOefsv@localhost \
--to=josh@joshtriplett.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=sebastian.thiel@icloud.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.