我有一个使用Git进行版本控制的网站目录。像Twitter Bootstrap、colorbox和lessjs这样的必需库,我使用子模块来引用它们的代码版本而不是跟踪它们的源代码。
现在,我想部署该项目,因此我需要子模块的代码。但是,使用 git archive
命令不会获取子模块的源文件/代码。
以下三种方法试图实现我想要的效果,但都无法正常工作: 第一种方法
#!/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"
Thomas Rast在http://git.661346.n2.nabble.com/Running-git-archive-recursively-over-submodules-td4577012.html中提到:
这在Windows和Linux上都会报错,指出没有找到对象文件。
第二种方法: https://github.com/meitar/git-archive-all.sh
在Windows上会提示找不到mktemp。而且从git-archive
改为git archive
后,在tar中并没有包含子模块的内容... :(
第三种方法: https://github.com/Kentzo/git-archive-all
我认为它已经过时了,因为不兼容最新的python 3.3,而且仍然无法在使用2.7时正常工作,因为samefile会报错。
所以我的问题是: 有没有最近的方法/方法来处理导出/归档包括子模块的git项目?
或者我应该检查子树是否适合此工作流程?
提前致谢