如何使用git-archive包含裸存储库中的子模块

Jac*_*cob 18 git deployment git-submodules git-bare

我正在设置部署脚本.基本过程是:

  1. 将更改推送到服务器上的裸存储库
  2. 然后基于新标签将为该版本创建一个新文件夹.
  3. 使用git archive将文件移动到release目录中
  4. 运行一些迁移脚本并将其置于活动状态(如果一切都成功).

问题是我的存储库包含一个子模块,它不会被放入存档中,因此不会放入发布目录中.

我见过git-archive-all,但这不适用于裸存储库.

如果不可能,我正在考虑,

  1. 使存储库不是裸露的,并更新工作副本,这将允许我使用git-archive-all.要么
  2. 在服务器上有一个子模块的第二个裸存储库,我可以从中获取存档(必须查看这个以确保我得到正确的修订).

Ale*_*lek 11

基于此处的答案和评论。您可以创建非裸存储库并运行:

git ls-files --recurse-submodules | tar caf ../prog.tar.gz -T-
Run Code Online (Sandbox Code Playgroud)
  • 要处理以连字符开头的文件,请使用--verbatim-files-from
  • 要将文件放入存档内的文件夹中,请使用--xform s:^:prog/:

完整版本:

git ls-files --recurse-submodules | tar caf ../prog.tar.gz --xform s:^:prog/: --verbatim-files-from -T-
Run Code Online (Sandbox Code Playgroud)


ism*_*nni 6

我使用这个 python 包https://github.com/Kentzo/git-archive-all。您可以使用安装它

pip install git-archive-all
Run Code Online (Sandbox Code Playgroud)

在 OSX 上,您也可以使用 brew install git-archive-all

  • 值得注意的是,这与@Brandon 的回答中提到的 git-archive-all 不同。 (2认同)