首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有子模块的git存档导出(git归档all /递归)

带有子模块的git存档导出(git归档all /递归)
EN

Stack Overflow用户
提问于 2013-02-08 23:37:10
回答 7查看 13.1K关注 0票数 19

我有一个版本的网站目录与git。我为所需的库使用子模块,如Twitter引导程序、彩色盒和日志库,因为我不应该跟踪源代码,而应该只跟踪它们所使用代码的版本。

现在我想部署这个项目,因此我也需要子模块代码。通过使用git archive,我无法从子模块获取源文件/代码。

以下三种方法试图实现我想要的,但不起作用:1 approach

代码语言:javascript
复制
#!/bin/sh

export revision="$1"

export GIT_INDEX_FILE=".git/tmpindex"
rm -f "$GIT_INDEX_FILE"

git read-tree $revision

export up="$(pwd)"

read_one_level () {
        export GIT_ALTERNATE_OBJECT_DIRECTORIES="$GIT_ALTERNATE_OBJECT_DIRECTORIES":$(
            git submodule foreach 'echo "$up/$path/.git/objects"' |
            grep -E -v '^(Entering|No submodule mapping found)' |
            tr '\n' : |
            sed 's/:$//'
        )

        git submodule foreach '
                cd "$up"
                subcommit=$(git rev-parse :"$path")
                git rm --cached "$path"
                git read-tree -i --prefix="$path/" $subcommit
        ' >/dev/null
}

while git ls-files -s | grep -q ^160000; do
    read_one_level
done

git archive --format=tar $(git write-tree)

rm -f "$GIT_INDEX_FILE" 

http://git.661346.n2.nabble.com/Running-git-archive-recursively-over-submodules-td4577012.html中的Thomas

这给我带来了两个错误,在Windows和Linux中都没有找到对象文件。

第二进场 https://github.com/meitar/git-archive-all.sh

抱怨在Windows上找不到mktemp。并且纠正对git archive的调用(从git-archive)不会给tar .:(

3进场 https://github.com/Kentzo/git-archive-all

在我看来已经过时了,因为它与最新的python3.3不兼容,并且仍然不能通过使用2.7完全工作,因为samefile会发出抱怨。

因此,我现在的问题是:最近有什么方法/方法来处理git项目的导出/归档,包括子模块吗?

或者我应该检查这个工作流的子树吗?

提前感谢

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-05-26 13:59:33

正如@肯塔佐所说,https://github.com/Kentzo/git-archive-all现在正在linux下工作。

在cygwin环境中(通过cygwin安装程序安装git和python ),它也在那里工作。

票数 7
EN

Stack Overflow用户

发布于 2017-10-03 19:11:57

我使用以下代码

代码语言:javascript
复制
git archive -o release.zip HEAD
git submodule --quiet foreach 'cd $toplevel; zip -ru release.zip $sm_path'

创建包含所有子模块的git存储库的完整存档。

如果你想花哨的话,你甚至可以重写zip评论

代码语言:javascript
复制
echo -e "Repository:\n$(git rev-parse HEAD)\nSubmodule status:\n$(git submodule status)" | zip -u release.zip -z

所有的窗口都使用信息压缩。

票数 9
EN

Stack Overflow用户

发布于 2020-12-27 13:47:38

如果你和我一样是接吻的朋友,你可以使用@t的答案,但是我发现这个解决方案没有归档嵌套的子模块。下面的代码会有帮助

代码语言:javascript
复制
# archive main directory
$ git archive --format tar -o release.tar HEAD
# descend recursively and archive each submodule
$ git submodule --quiet foreach --recursive 'git archive --format tar --prefix=$displaypath/ -o submodule.tar HEAD'
# concatenate with main archive
$ TOPDIR=$(pwd) git submodule --quiet foreach --recursive 'cd $TOPDIR; tar --concatenate --file=release.tar $displaypath/submodule.tar; rm -fv $displaypath/submodule.tar'
$ gzip -9 release.tar

结果是文件result.tar.gz..。当然,您可以选择另一个提交,而不是头。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14783127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档