René Scharfe <l.s.r@xxxxxx> writes: > If the prefix is applied then a prefix-less extra file can by had by > using --prefix= or --no-prefix for it and --prefix=... for the tree, > e.g.: > > $ git archive --add-file=extra --prefix=dir/ v2.36.0 > > puts "extra" at the root and the rest under "dir". The order of > arguments matters here, and the default prefix is the empty string. This was the part of the design for the original "--add-file" that I was moderately unhappy with. If "--add-file" were the only feature that used "--prefix", I wouldn't have been unhappy, but this rule: The value of "--prefix" most recently seen at the point of "--add-file" is prepended. (By the way, it is not clearly documented what happens when you give multiple prefix and when you give prefix before or after add-file) makes the original use of "--prefix": The value given to "--prefix" is prepended to each filename in the archive. (IOW "git archive --prefix=git-2.36.0/ v2.36.0" is a way to prefix each and every path in the tree-ish with the given prefix) confusing. Does git archive --prefix=bonus-files/ --add-file=extra v2.36.0 place the main part of the archive also in bonus-files/ or at the top level? One reasonable interpretation is "yes", if we imagine that each invocation of --add-file will consume and reset the prefix. Another reasonable interpretation is "no", if we imagine that the prefix last specified will stay around and equally affect both extra ones and main part of the archive. Unfortunately what the implmentation does is the latter, and those who want to put the main part of the archive at the top-level must add "--prefix=''" at the end (before the tree-ish). Because of this potential for confusion ... > So extra files can be put anywhere even if --prefix is honored. > > Keeping the whole path from --add-virtual-file makes sense to me; I > slightly prefer applying --prefix on top of that for consistency. ... I was hoping that we can releave users from having to worry about the interaction between "prefix" and contents coming from outside the tree-ish by ignoring the "prefix". But either is fine by me. Thanks.