背景描述:
git 项目里有使用到 git submodule ,然后使用了gitlab,当推送到gitlab上时,会触发 .gitlab-ci.yml 进行一些自动化的构建,测试,发布等等动作。其中有一步是要把gitlab上这个仓库,归档(git archive)后,使用 rsync 到另一台服务器上。
问题描述
在使用 git archive
的时候,发现并没有把项目里的submodule
里的文件归档过去,只有一个submodule
的文件夹
目的
需要让git submodule
里的文件也能够归档过去,这样依赖才正常。在网上查询了方法,发现有一个python 的库,能够使用其命令完成子模块的归档,链接见此:link
思考:能不能不使用这个依赖库,自己使用命令完成 ?
再次google后,发现一篇帖子给了我思路:link
大概的思路就是,1、先在父目录使用git archive
后,再通过git submodule foreach
遍历submodule,对sudmodule里的文件进行git archive
,这样最后,所有文件都能归档到一个地方了。
下面是部分shell
的代码
# use HEAD if tag doesn't exist yet, so that development is easier...
PROJECT_NAME="rf_common"
git archive --format=tar --prefix=$PROJECT_NAME/ HEAD | (cd /Users/wei/Desktop/target/ && tar xf -) #归档父项目后解压到指定目录
# TODO: if git archive had a --submodules flag this would easier!
echo Running git archive submodules...
p=`pwd` && git submodule foreach | while read desc subdir; do
subdir=${subdir#*\'}; #去除最左边的单引号
subdir=${subdir%*\'}; #去除最右边的单引号
[ "${subdir}" = "" ] && continue; //加一步判断,subdir为""则continue
(cd ${subdir} && git archive --format=tar --prefix=${subdir}/ HEAD | (cd /Users/wei/Desktop/target/$PROJECT_NAME/ && tar xf -)); #归档submodule后解压到父目录
done
网友评论