Taylor Blau <me@xxxxxxxxxxxx> 于2023年8月3日周四 23:24写道: > > On Thu, Aug 03, 2023 at 01:16:02PM +0800, ZheNing Hu wrote: > > > Here, it is necessary to compare multiple versions of blobs while also > > > considering the situations of creation and deletion. > > > > > > Well, what I need is the "diff" content, with lines in the diff indicating > > > '+' or '-' signs. This can be achieved by manually adding them, but it is > > > not very compatible with the original logic. > > > > The native diff command itself supports comparison with an empty file. > > > > #diff -u /dev/null a > > --- /dev/null 2023-07-25 16:47:50.270094301 +0800 > > +++ a 2023-08-03 13:14:16.980262362 +0800 > > @@ -0,0 +1 @@ > > +a > > > > So I believe this feature would also be useful in git. > > Sure, you can easily diff any file against any other, including if > either one or both are empty. I think the main difference here is that > /dev/null exists on your system without additional configuration and > the empty blob does not exist in a Git repository without additional > configuration (in this case, `git hash-object -w -t blob --stdin > </dev/null`). > > TBH, I don't know if /dev/null existing by default is necessarily a > solid argument in favor of having Git repositories come initialized with > the empty blob by default. > > (To be clear, when I say "initialized", I mean that a Git repository > would recognize the empty blob object's hash for any value of > `the_hash_algo`, not that every repository would be prepared with a > loose object by default.) > Actually, there is no need to support a default empty blob. For example, with the command "git diff --no-index <file> /dev/null", it can compare a file with /dev/null, but it can only compare <file> and not <oid>. Therefore, using commands like "git diff <oid> /dev/null", "git diff --no-index <oid> /dev/null", or even "git diff <oid> --stdin" could potentially solve this issue. Thanks, ZheNing Hu