从广义上讲,我想要的是直接的 tar 到 tar 转换,其中结果的根仅包含原始目录的特定目录子树。
为了举例说明,假设我只想要 git 存储库中的 gitweb directory。运行
$ git archive --prefix=git-gitweb/master gitweb | tar tf -
给
git-gitweb/
git-gitweb/gitweb/
git-gitweb/gitweb/安装
git-gitweb/gitweb/Makefile
git-gitweb/gitweb/自述文件
git-gitweb/gitweb/gitweb.perl
git-gitweb/gitweb/静态/
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/安装
git-gitweb/Makefile
git-gitweb/...
manual 提供了额外的后端特定选项,但尝试传递 --strip-components
会产生错误:
$ git archive --prefix=git-gitweb/--strip-components=1 master gitweb |\
tar tf -
错误:未知选项`strip-components=1'
用法:git archive [选项] [...] ...
无论如何,tar 后端都不是 GNU tar。
freenode 的 #gnu channel 中有人建议 Tardy ,但它不理解 git-archive 的输出:
$ git存档主> old.tar
$ tardy old.tar new.tar
迟到:old.tar:文件类型“g”未知
是的,我可以使用 --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/