linux - 如何使用 git-archive 获得 GNU tar 的 --strip-components 的效果?

标签 linux git unix gnu tar

从广义上讲,我想要的是直接的 tar 到 tar 转换,其中结果的根仅包含原始目录的特定目录子树。

举例说明,假设我只想要 gitweb directory来自 git 的存储库。运行

$ git archive --prefix=git-gitweb/ master gitweb | tar tf -

给予

git-gitweb/
git-gitweb/gitweb/
git-gitweb/gitweb/INSTALL
git-gitweb/gitweb/Makefile
git-gitweb/gitweb/README
git-gitweb/gitweb/gitweb.perl
git-gitweb/gitweb/static/
git-gitweb/gitweb/static/git-favicon.png
git-gitweb/gitweb/static/git-logo.png
git-gitweb/gitweb/static/gitweb.css
git-gitweb/gitweb/static/gitweb.js

但是我想要

git-gitweb/
git-gitweb/INSTALL
git-gitweb/Makefile
git-gitweb/...

manual提供额外的特定于后端的选项,但尝试传递 --strip-components 会产生错误:

$ git archive --prefix=git-gitweb/ --strip-components=1 master gitweb | \
  tar tf -
error: unknown option `strip-components=1'
usage: git archive [options]  [...] ...

无论如何,tar 后端都不是 GNU tar。

freenode 的#gnu channel 有人建议Tardy , 但它不理解 git-archive 的输出:

$ git archive master > old.tar
$ tardy old.tar new.tar
tardy: old.tar: file type ``g'' unknown

是的,我可以使用 --strip-components 提取 git-archive 的输出并创建一个新的结果存档,但我试图避免将文件系统用作临时变量.

最佳答案

将该目录存档为 CWD,您将不会有额外的路径组件:

(cd gitweb; git archive --prefix=git-gitweb/ master .) | tar tf -

或者按照 git-archive 手册页的建议使用此语法:

git archive --prefix=git-gitweb/ master:gitweb | tar tf -

关于linux - 如何使用 git-archive 获得 GNU tar 的 --strip-components 的效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4876525/

相关文章:

git - 如何列出在给定提交之间创建/删除的文件

unix - 将远程文件放入 hadoop 而不将其复制到本地磁盘

c++ - 通过c/c++程序在linux中生成系统声音

linux - Linux脚本和Ififif else语句

git - 默认推送到 --recurse-submodules=check

svn - 将 git 与 svn 结合使用

linux - 在现有的 Hadoop 集群上安装 Spark

c - kvm:模块验证失败:缺少签名和/或所需的 key - 污染内核

linux - 读取并删除名称中包含空格的文件

linux - 使用 getopts (bash) 的多个选项参数