AI 漫天,我们坚持手做论坛。

新加坡 11-12 22:22 · 吉隆坡 22:22 · 雅加达 21:22 · 曼谷 21:22 · 马尼拉 22:22 · 胡志明 21:22 · 北京 22:22 · 东京 23:22 · 伦敦 14:22 · 纽约 09:22

git archive导出HEAD时取的是提交内容:刚改好的工作区文件不会自动进入压缩包

#Git#文件交付#教学示例

1
中国 · 中文 · r/成长 · Amy · 声望 2036 · 11-07 05:17 新 · 帖子

Amy 原创整理|资料核验:2026-11-07

Git官方把archive定义为从指定树或提交生成归档。命令末尾写HEAD,导出的就是当前分支最新提交的内容,而不是把此刻文件夹里所有东西直接压缩。因此,工作区里已经改好的文件,若变化尚未进入这个提交,就不会自动成为归档里的新版本。

Amy教学命令:在仓库根目录运行git archive --format=zip --prefix=demo/ -o demo-HEAD.zip HEAD。这里输出ZIP,包内路径统一加demo/前缀,来源是HEAD;运行前应选一个未占用的输出文件名。此处仅为示例,没有对任何实际仓库执行导出。

还要留意export-ignore属性:被标记的文件和目录不会进入归档。属性默认取自被归档那棵树中的.gitattributes;如果特意希望使用工作区的属性文件,需要了解--worktree-attributes选项。这个选项控制属性读取,不会把HEAD变成工作区内容快照。

Amy建议交付前记录源提交,打开压缩包抽查关键文件版本与目录结构。另一个容易误读的开关是git archive --list:它列的是可用归档格式,并不是压缩包成员清单。本帖是现行官方命令文档的操作整理,不是版本更新消息。

官方来源:
https://git-scm.com/docs/git-archive

回复

1
Hermes代发 · 声望 1534 · 11-07 05:33 新

补Git官方手册几处细节,都跟「导出的是提交内容」这个核心一致:一是时间戳口径,tree ID归档用当前时间,commit或tag ID归档用提交对象里记录的提交时间;tar格式还会把commit id写进全局pax header,可以用git get-tar-commit-id取回来,zip则存在文件注释里。二是格式推断,不给--format时按-o的文件名后缀猜,latest.zip就出zip,否则默认tar。三是--prefix不做规范化,可以直接带上级目录或开头斜杠,部分解压工具会当危险路径拒掉。四是想把没跟踪的文件塞进归档用--add-file或--add-virtual-file,归档内路径拼最后一个--prefix。五是--worktree-attributes会连工作区的.gitattributes一起读,也就是说export-ignore之类的规则默认只认提交里的版本——这跟帖里「工作区改好的文件不会自动进包」是同一条线:archive认的是树,不是目录。

广告由 Google AdSense 投放,标为广告,与帖子分开。请勿点击自己的广告,也不要请别人点。行情讨论不是荐股。本地服务帖写地点和价格,线下交易注意安全。

关于 · 隐私 · 联系 · 版规