git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: git-archive and tar options

From
Jeff King <peff@peff.net>
Date
Jul 14, 2011, 01:56 UTC
Message-ID
<20110714015656.GA20136@sigill.intra.peff.net>
In-Reply-To
<ivla29$liu$1@dough.gmane.org>
On Wed, Jul 13, 2011 at 06:34:32PM -0500, Neal Kreitzinger wrote:
Show 12 quoted lines
> the git-archive manpage states:
> 
> "git archive [--format=<fmt>] [--list] [--prefix=<prefix>/] [<extra>] [-o 
> | --output=<file>] [--worktree-attributes] [--remote=<repo> 
> [--exec=<git-upload-archive>]] <tree-ish>  [path\u2026]
> 
> <extra>
>     This can be any options that the archiver backend understands. See next 
> section."
>
> I have tar 1.23 and want to use the --transform option.  How can I feed 
> git-archive additional tar options?
Right. And the next section is "Backend Extra Options", which has:
   zip
       -0
           Store the files instead of deflating them.
       -9
           Highest and slowest compression level. You can specify any number from 1 to 9
           to adjust compression speed and ratio.

And nothing else. We don't actually call your system "tar" to generate the tarball, which is what I assume you thought when you saw "backend". A patch to make it more clear would be welcome.

Show 15 quoted lines
> Working syntax starting points for git-archive and tar:
> 
> git archive --format=tar -o my.tar HEAD Web/Templates/
> tar -cvf my.tar --transform 's,^Web/Templates/,myPath/myWeb/Templates/,' 
> WebPortal/Templates/
> 
> Failed syntax attempts for feeding tar option to git-archive:
> 
> git archive --format=tar -o my.tar HEAD --transform 
> 's,^Web/Templates/,myPath/myWeb/Templates/,' WebPortal/Templates/
> error: unknown option `transform'
> 
> git archive --format=tar -o my.tar --transform 
> 's,^Web/Templates/,myPath/myWeb/Templates/,' HEAD WebPortal/Templates/
> error: unknown option `transform'

Yeah, that won't work, because there is no such option. We do have "--prefix", but I suspect that's not flexible enough for what you want.

So you're probably stuck with extracting the results of "git archive" to a temporary directory and then using GNU tar to re-archive them (or if you have a checkout, you can just tar that up directly, feeding the list from "git ls-files" into tar). It would be nice if GNU tar could act as a post-processor, and do something like:

  git archive HEAD | tar --pipe-mode --transform=whatever >my.tar
But AFAIK, nothing like "--pipe-mode" exists.

It would probably not be a very hard feature to add to "git archive" if you're interested in doing so.

-Peff
Previous: Neal KreitzingerNext: René Scharfe
Message 2 of 22 in “git-archive and tar options”
  1. Neal KreitzingerJul 13, 2011
  2. Jeff KingJul 14, 2011
  3. René ScharfeJul 14, 2011
  4. Jeff KingJul 14, 2011
  5. René ScharfeJul 14, 2011
  6. Jeff KingJul 14, 2011
  7. Jakub NarebskiJul 14, 2011
  8. Junio C HamanoJul 14, 2011
  9. Jeff KingJul 14, 2011
  10. Junio C HamanoJul 14, 2011
  11. René ScharfeJul 15, 2011
  12. Neal KreitzingerJul 18, 2011
  13. René ScharfeJul 18, 2011
  14. Jakub NarebskiJul 14, 2011
  15. Neal KreitzingerJul 18, 2011
  16. René ScharfeJul 18, 2011
  17. Neal KreitzingerJul 19, 2011
  18. René ScharfeJul 19, 2011
  19. Neal KreitzingerJul 21, 2011
  20. Neal KreitzingerJul 21, 2011
  21. Andreas SchwabJul 14, 2011
  22. Sylvain RabotJul 19, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.