From: Phillip Wood Date: Fri, 13 Oct 2023 10:06:55 GMT Subject: Re: [RFC] Define "precious" attribute and support it in `git clean` Message-ID: <0deee2bc-1775-4459-906d-1d44b3103499@gmail.com> In-Reply-To: On 12/10/2023 17:58, Junio C Hamano wrote: > Sebastian Thiel writes: Sebastian - thanks for raising this again, it would be really good to get a solution for handling "ignored but not expendable" files > I have been regretting that I did not make the quoting syntax not > obviously extensible in f87f9497 (git-ls-files: --exclude mechanism > updates., 2005-07-24), which technically was a breaking change (as a > relative pathname that began with '!' were not special, but after > the change, it became necessary to '\'-quote it). A relative > pathname that begins with '$' would be now broken the same way, but > hopefully the fallout would be minor. I presume you picked '$' > exactly because of this reason? > > I do not think it will be the end of the world if we don't do so, > but it would be really really nice if we at least explored a way (or > two) to make a big enough hole in the syntax to not just add > "precious", but leave room to later add other traits, without having > to worry about breaking the backward compatibility again. A > simplest and suboptimal way may be to declare that a path that > begins with '$' now needs '\'-quoting (just like your proposal), > reserve '$$' as the precious prefix, and '$' followed by any other > byte reserved for future use, but there may be better ideas. One thought I had was that we could abuse the comment syntax to annotate paths something like #(keep) /my-precious-file would prevent /my-precious-file from being deleted by git clean (and hopefully unpack-trees()[1]). It means that older versions of git would treat the file as ignored. If we ever want more than one annotation per path we could separate them with commas #(keep,something-else) /my-file Strictly speaking it is a backward incompatible change but I doubt there are many people using comments like that. I also wondered about some kind of suffix on the file /my-precious-file #(keep) but that means that older versions of git would not ignore the file. Best Wishes Phillip [1] Of the cases listed in [2] it is "git checkout" and friends overwriting ignored files that I worry about more. At least "git clean" defaults to a dry-run and has in interactive mode to select what gets deleted. [2] https://lore.kernel.org/git/xmqqttqytnqb.fsf@gitster.g