我有一个版本的网站目录与git。我为所需的库使用子模块,如Twitter引导程序、彩色盒和日志库,因为我不应该跟踪源代码,而应该只跟踪它们所使用代码的版本。
现在我想部署这个项目,因此我也需要子模块代码。通过使用git archive,我无法从子模块获取源文件/代码。
以下三种方法试图实现我想要的,但不起作用:1 approach
#!/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项目的导出/归档,包括子模块吗?
或者我应该检查这个工作流的子树吗?
提前感谢
发布于 2013-05-26 13:59:33
正如@肯塔佐所说,https://github.com/Kentzo/git-archive-all现在正在linux下工作。
在cygwin环境中(通过cygwin安装程序安装git和python ),它也在那里工作。
发布于 2017-10-03 19:11:57
我使用以下代码
git archive -o release.zip HEAD
git submodule --quiet foreach 'cd $toplevel; zip -ru release.zip $sm_path'创建包含所有子模块的git存储库的完整存档。
如果你想花哨的话,你甚至可以重写zip评论
echo -e "Repository:\n$(git rev-parse HEAD)\nSubmodule status:\n$(git submodule status)" | zip -u release.zip -z所有的窗口都使用信息压缩。
发布于 2020-12-27 13:47:38
如果你和我一样是接吻的朋友,你可以使用@t的答案,但是我发现这个解决方案没有归档嵌套的子模块。下面的代码会有帮助
# 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..。当然,您可以选择另一个提交,而不是头。
https://stackoverflow.com/questions/14783127
复制相似问题