从广义上讲,我想要的是直接的 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/