我正在使用 git-archive 命令来归档 git 仓库中的一个子目录,如下所示:
git archive -o ../subarchive.zip HEAD subdir/*
然而,生成的存档文件保持子目录/目录结构,即其内容如下:
subdir/
whatever.js
morestuff.js
我实际上想要whatever.js和morestuff.js位于归档的根目录中。怎么做?谢谢。
我正在使用 git-archive 命令来归档 git 仓库中的一个子目录,如下所示:
git archive -o ../subarchive.zip HEAD subdir/*
然而,生成的存档文件保持子目录/目录结构,即其内容如下:
subdir/
whatever.js
morestuff.js
我实际上想要whatever.js和morestuff.js位于归档的根目录中。怎么做?谢谢。
git archive -o ../subarchive.zip HEAD:subdir
顺便提一下,玩转命令并查看其生成的简单方法是以以下形式使用它:
git archive --format=tar HEAD:subdir | tar t
git archive --format=tar HEAD subdir | tar t
# ... and so on ...
一旦找到所需内容,您可以更改格式并使用-o
标记来实际创建档案。
git archive -o ../subarchive.zip HEAD:subdir
,请确保使用Git 2.41(2023年第二季度)进行操作:"git archive
"(man)在子目录中运行时,会错误处理超出当前目录的属性和路径。
查看 提交 92b1dd1(2023年3月24日)由René Scharfe (rscharfe
)提交。
(由Junio C Hamano -- gitster
--合并于提交 de73a20,2023年4月21日)
当在子目录中启动
存档
:改进在子目录中运行的支持报告者:Cristian Le
报告者:Matthias Görgens
签名作者:René Scharfe
git archive
(man)时,它只会归档其对应的树和其子对象。然而,这样做会带来不幸的后果:属性被锚定在仓库的根目录上,而git archive
仍然将其应用于子树,导致不匹配。
在检查路径规范时,它无法区分一个不匹配任何内容的路径规范和一个匹配子目录外某个实际blob的路径规范,从而导致了一个令人困惑的错误信息("current working directory is untracked
")。
通过保留"prefix"值并将其传递给pathspec和attribute函数,并使用relative_path()
缩短写入存档的路径(如果给出--verbose
,则还会打印到stdout)来修复这个问题。
仍然拒绝尝试归档当前目录之外的文件,但在这种情况下打印更具体的错误信息("outside the current directory
")。
然而,要识别它需要对每个路径规范进行完整的子树遍历。
允许它们可能更容易,但以"../
"开头的存档条目路径可能在提取时出现问题--例如,默认情况下bsdtar
会跳过它们。
--remote
但速度非常慢。 - R.. GitHub STOP HELPING ICEgit archive --help
命令中找不到某些内容,请告诉我(并尽可能具体地说明)。 - janosHEAD:/
和HEAD:.
无法正常工作。 - user234461.gitattributes
中的“export-ignore”语句。即使文件包含在您要导出的目录中,即使您使用了“--worktree-attributes”。 - rugk.gitattributes
"export-ignore"一起使用的问题,我提出了一个单独的问题,但实际上并没有起作用:如何忽略“git archive”中的文件/目录,仅创建子目录的归档? - rugk