Re: [RFC] Define "precious" attribute and support it in `git clean`
- From
- Phillip Wood <phillip.wood123@gmail.com>
- Date
- Oct 13, 2023, 10:06 UTC
- Message-ID
- <0deee2bc-1775-4459-906d-1d44b3103499@gmail.com>
- In-Reply-To
- <xmqqttqvg4lw.fsf@gitster.g>
On 12/10/2023 17:58, Junio C Hamano wrote:
> Sebastian Thiel <sebastian.thiel@icloud.com> writes:
Sebastian - thanks for raising this again, it would be really good to get a solution for handling "ignored but not expendable" files
Show 18 quoted lines
> 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