我正在设置部署脚本。基本过程是:
问题是我的存储库包含一个子模块,它不会被放入存档中,因此不会放入发布目录。
我见过git-archive-all,但这不适用于裸存储库。
如果不可能,我正在考虑,
答案 0 :(得分:3)
我使用这个python包https://github.com/Kentzo/git-archive-all。您可以使用
安装它pip install git-archive-all
在OSX上,您也可以使用brew install git-archive-all
答案 1 :(得分:2)
如果您的子模块位于可从服务器访问的repo中,我宁愿使用post-receive hook
git submodule update --init
)git archive
(你肯定会得到正确的版本,因为非裸回购将引用正确版本的子模块)git archive-all
将能够检测.git
子目录并存档所有内容 如果无法从服务器访问子模块,则表示:
答案 2 :(得分:1)
答案 3 :(得分:1)
这里只是几个班轮:
prefix=$(basename "$(pwd -P)")
{
git ls-files
git submodule foreach --recursive --quiet \
'git ls-files --with-tree="$sha1" | sed "s#^#$path/#"'
} | sed "s#^#$prefix/#" | xargs tar -c -C.. -f "$prefix.tar.xz" --
答案 4 :(得分:0)
在常规归档命令后运行以下命令:
git submodule foreach 'cd REPO_ROOT/$path && git archive HEAD | tar -x -C TARGET_ROOT/$path'
此处,REPO_ROOT是您的仓库所在的位置,而TARGET_ROOT是您存档的版本。 (我假设您有一个TARGET_ROOT文件夹,其中第一个git archive
调用的扩展版本。如果您想要最终的zip / tar,您可以tar / zip最终文件夹)
git submodule foreach
提供$path
变量。有关详细信息,请参阅git help submodule
foreach部分。
答案 5 :(得分:0)
基于此处的回答和评论。您可以创建非裸仓库并运行:
git ls-files --recurse-submodules | tar caf ../prog.tar.gz -T-
--verbatim-files-from
--xform s:^:prog/:
完整版:
git ls-files --recurse-submodules | tar caf ../prog.tar.gz --xform s:^:prog/: --verbatim-files-from -T-