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

Re: git-archive and tar options

From
NKNeal Kreitzinger <nkreitzinger@gmail.com>
Date
Jul 18, 2011, 18:13 UTC
Message-ID
<4E2477E1.5090406@gmail.com>
In-Reply-To
<20110714172718.GA21341@sigill.intra.peff.net>
On 7/14/2011 12:27 PM, Jeff King wrote:
Show 34 quoted lines
> On Thu, Jul 14, 2011 at 07:16:24PM +0200, René Scharfe wrote:
>
>>>> 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.
>>
>> If you only need a single subdirectory with a custom prefix you
>> could do something like this (variables only used to keep the lines
>> short):
>>
>> $ subdir=WebPortal/Templates $ prefix=myPath/myWeb/Templates/ $ (cd
>> "$subdir"&&  git archive --prefix="$prefix" HEAD)>my.tar
>>
>> The output file can be specified with -o as well, of course, but
>> you'd either need to use an absolute path or add "../" for each
>> directory level you descend into (-o ../../my.tar in this case).
>
> Couldn't you also do:
>
> git archive --prefix=$prefix HEAD:$subdir>my.tar
>
> ? I guess that loses the pax header with the commit sha1 in it,
> though, because you are feeding a straight tree instead of a commit.
>
> We didn't when git-archive was written, but these days we have
> get_sha1_with_context to remember incidental things about an object
> we look up. It should perhaps remember the commit (if any) we used to
> reach a treeish, and then the above command line could still insert
> the pax header.
>

HEAD:$subdir worked on my bare repo. I ran it for each transformant pathspec and then combined the archives with tar --catenate:

# git archive --format=tar --prefix=myWeb/myRoot/myAPP/Templates/ HEAD:WebPortal/Templates/ >myAPP.myTag.tar # git archive --format=tar --prefix=opt/mySTUFF/v01/SCRIPTS/ HEAD:SCRIPTS/ >SCRIPTS.tar # tar --file=myAPP.myTag.tar -A SCRIPTS.tar

However, the permissions also need to change to 777 and tar --mode would not effect this in combination with --catenation or -x. Is there a way I can change the permissions without having to untar->chmod->retar, and without having to use a non-bare repo as an intermediary?

v/r, neal

Previous: Jakub NarebskiNext: René Scharfe
Message 15 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.